1

これは私の最初の投稿です。私の英語で申し訳ありません...

postJSON に問題があり、ModelAndView で部分ビューを返します。

私のコントローラー:

    @RequestMapping(method=RequestMethod.POST, value = "/addUrl.html")
public @ResponseBody ModelAndView addSubMenu(@RequestBody Menu menu) {
    ModelAndView mav = new ModelAndView(PathConfig.MENU_DIR + "show_url");

    int id = menuService.saveOrUpdateMenu(1, menu.getTitle(), menu.getUrl(), 4, "pl");
    mav.addObject("submenu", menuService.get(id));
    return mav;
}

私のajaxコード:

$("#menuUrl").submit(function(){
    var menu = $(this).serializeObject();

    $.ajax({
        type: "POST",
        url: config.resourcePath+"/addUrl.html",
        data: JSON.stringify(menu),
        dataType: 'json',
        contentType: "application/json; charset=utf-8",
        success: function(response){
            $( "#site" ).append(response);
        },
        error: function(e){
            alert("Server did not response.");
        }
    });

});

しかし...エラーがあります:サーバーが応答しませんでした...

jsonで部分ビューをレンダリングするにはどうすればよいですか?

ありがとう。

4

3 に答える 3

0

ページの一部を更新するために json が必要な場合は、ModelAndView を返さず、文字列を返します。json シリアライザーがあることを確認してください。

    @RequestMapping(method=RequestMethod.POST, value = "/addUrl.html")
    public @ResponseBody String addSubMenu() {
         //yourvariable
         return yourvariable.toString();
    }
于 2012-12-11T04:34:08.287 に答える
0

ここで間違っている可能性があることがいくつかあります。

Content-typeのヘッダーを指定するapplication/jsonことで、json の応答が返されることを期待していますが、応答の処理方法を見ると、必要なものは html のように見えます

応答として探しているのが html の場合は、要求から Content-Type ヘッダーを削除し、応答@ResponseBodyから注釈を削除しModelAndViewます。代わりに、期待する html 応答を作成できる通常の jsp を指すビューを返します。 ..

@RequestMapping(method=RequestMethod.POST, value = "/addUrl.html")
public ModelAndView addSubMenu(@RequestBody Menu menu) {
...
}
于 2012-12-11T01:47:26.573 に答える
0
$("#menuUrl").submit(function(){
    var obj = $(this).serializeObject();
    obj.parentId = getParentId(menuDivId);

    $.ajax({
        url: config.resourcePath+"/addUrl.html", 
        data : JSON.stringify(obj),
        contentType : 'application/json',
        type : 'POST',
        context: document.body,
    }).done(function(response) {
        $("#site").append(response);
    });

    return false;
});

そしてModelAndViewを返すコントローラー。それは働いています。

于 2012-12-11T11:06:50.507 に答える