我试图将模型对象从 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;
}
这也不会生成成功警报。 请推荐
你的方法应该直接返回列表,作为json,不需要将其放入模型中并返回模型。还要检查回调 ajax 中是否有错误。
您在 ajax 调用中指定
dataType: 'JSON'
,但没有将响应对象(模型)转换为控制器中的 json。
来自 jQuery ajax 文档 的
dataType
设置:
您期望从服务器返回的数据类型。如果未指定,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]);
}
}
还有一个用于读取 json 对象的小提琴示例
我遇到了这个问题,我花了几个小时才找出问题所在。
只需从参数中删除“模型模型”即可。
请使用
Map<String, String>
或 Map<String, Object>
代替。
尝试将
produces = MediaType.APPLICATION_JSON
添加到 RequestMapping 注释中
@RequestMapping(method=RequestMethod.GET, value="/abc", produces = MediaType.APPLICATION_JSON)
此外,您可能不需要方法中的模型参数。