8

嗨,我正在使用 spring mvc + ajax。我通过传递用户 ID 进行了 ajax 调用。一切顺利,成功返回 ajax,但是当我提醒响应时,它简单地显示了 html 页面代码。请帮我解决这个问题。我想我没有很好地编码我的ajax。帮助我以正确的方式

控制器代码:

  public @ResponseBody ModelAndView abc(HttpServletRequest httpServletRequest,
        HttpSession session, ModelMap map){

      ModelAndView modelAndView = new ModelAndView("abcd.page",
                "commandName", object);
           return modelAndView;

阿贾克斯代码:

     $(".userDetails").click(function() {
            alert("clicked");
        var userId=$(this).parent().parent(). parent().find(".userId"). 
                       text().trim();
            alert("userId :"+userId);
            $.ajax({

            url : 'ABC.htm',
            type : 'GET',
            data: {userId:userId},
            beforeSend: function(xhr) {  
                xhr.setRequestHeader("Accept", "application/json");  
                xhr.setRequestHeader("Content-Type", "application/json");  
            },  
            success : function(response) {
                alert("success");
                alert(response);
            },
            error : function(res) {
                alert("error");
            },

        });

            return false;
        });

警报的输出(响应);是 在此处输入图像描述

编辑:任何人都可以告诉为什么 ajax 成功提供 html 内容...经过多次更改后,我得到了相同的警报。

再次编辑:我认为我的控制器没有任何问题。请建议我正确编码我的 ajax 的解决方案。这里似乎有错误。如何在 ajax 中获取 ModelAndView 对象

4

1 回答 1

11

你没有ModelAndView在 AJAX 中得到对象。Spring 使用HandlerMethodReturnValueHandler实例来处理处理程序方法的返回值。因为ModelAndView,它使用ModelAndViewResolverMethodReturnValueHandler. 因为@ResponseBody,它使用RequestResponseBodyMethodProcessor. 这些是按特定顺序检查的,forModelAndView具有更高的优先级。因此,当您返回 a 时ModelAndView,Spring 会将模型属性添加到完整状态Model,然后将您的视图名称解析为 ajsp并写入来自该的响应jsp,从而为您提供一些 HTML。由于 AJAX 只看到来自请求的响应,所以它会看到 HTML。

如果要返回 JSON,不要返回 a ModelAndView,直接返回模型对象或者自己直接写 JSON 到响应中。

于 2013-11-14T13:52:51.580 回答