【问题标题】:Returning model object from Controller to Ajax jquery not working in Spring mvc将模型对象从控制器返回到 Ajax jquery 在 Spring mvc 中不起作用
【发布时间】:2015-05-07 11:38:05
【问题描述】:

我正在尝试将模型对象从 spring mvc 控制器返回到 jquery ajax 方法,但它返回空白作为响应

jsp:

$( "#dialog-link10" ).click(function( event ) {
var appname= $("#dialog-link10").text();
alert(appname);
if(appname == 'RS Applications') {
$.ajax({
    type : "GET",
    url : 'abc.html',
    dataType: 'JSON' ,
    data: 
        {"id" : $("#dialog-link10").text()}
    ,
    success : function(data) {
        alert('success')
        alert('data')

    }
});}

控制器:

@RequestMapping(method=RequestMethod.GET, value="/abc")
@ResponseBody
public  Model helloWorld2( @RequestParam("id") String id, Model model) {

    System.out.println("*****"+id);

    List <String> list1=new ArrayList<String>();
    List <String> list2=new ArrayList<String>();

        System.out.println("here");

        list1.add("abc");
        list1.add("abc2");
        list1.add("abc3");
        list1.add("abc4");

        model.addAttribute("list1", list1);

        return model;
        }

这也不会生成成功警报。 请推荐

【问题讨论】:

  • 您在发出 ajax 请求时是否在控制台中看到此 *****&lt;id&gt;?我认为您的请求没有到达控制器。
  • 是的 id 正在打印...它进入控制器内部但没有从那里返回...如果我将返回类型更改为字符串而不是列表它返回成功但是当我试图从控制器方法中检索列表作为响应,它不起作用
  • 您在控制台中看到什么了吗?消息转换、不支持的媒体等是否有任何错误?您是否在 Spring 配置文件中注册了杰克逊消息转换器?在此处发布配置文件。
  • 是的,我在 dispatcher-servlet 中添加了 jackson mapper:
  • mvc:annotation-driven>

标签: java jquery ajax spring-mvc


【解决方案1】:

你的方法应该直接返回列表,作为json,不需要放入模型中返回模型。还要检查您的回调 ajax 中是否有错误。

【讨论】:

  • 而在调试浏览器中,结果如何?
  • 我检查了添加错误,它返回错误,还有没有检查原因?
【解决方案2】:

您在 ajax 调用中指定 dataType: 'JSON',但您没有在控制器中将响应对象(模型)转换为 json。

来自 jQuery ajax documentationdataType 设置:

您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它(XML MIME 类型将产生 XML,在 1.4 中 JSON 将产生 JavaScript 对象,在 1.4 中脚本将执行脚本,其他任何内容都将是作为字符串返回)

您可能想要引用 json 序列化程序(除非您想编写自己的序列化程序) - 但重要的部分是将您的 model 序列化为 json 在您的响应中。例如(使用json-io):

String jsonModel = JsonWriter.objectToJson(model);
return jsonModel;

然后您可以通过以下方式访问包含在您的 json 响应对象中的字符串数组:

success : function(data) {
     for (i = 0; i < data.list1.length; i++){
          alert(data.list1[i]);
     }
}

还有一个 reading json objects 的小提琴示例

【讨论】:

    【解决方案3】:

    我遇到了这个问题,我花了几个小时才发现问题。
    只需从您的参数中删除“模型模型”。
    请改用Map&lt;String, String&gt;Map&lt;String, Object&gt;

    【讨论】:

      【解决方案4】:

      尝试将produces = MediaType.APPLICATION_JSON 添加到 RequestMapping 注释中

      @RequestMapping(method=RequestMethod.GET, value="/abc", produces = MediaType.APPLICATION_JSON)
      

      另外,您可能不需要方法中的模型参数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 2015-01-03
        相关资源
        最近更新 更多