如何通过ajax从spring控制器获取数据?
我在jsp
页面上有一个ajax
,通过URL /check
调用spring控制器。
$.ajax({ type : "GET", url : "${pageContext.request.contextPath}/check", data : { "id" : ${articleCount} }, success: function(data){ //response from controller } });
现在,控制器看起来像,
@RequestMapping("/check") public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) { boolean a = getSomeResult(); if (a == true) { model.addAttribute("alreadySaved", true); return view; } else model.addAttribute("alreadySaved", false); return view; }
我使用模型发送数据并尝试success: function(data)
访问它success: function(data)
为"${alreadySaved}"
但它显示为空白。
有什么办法可以在视图页面上收到true/false
数据吗?
您必须为spring ajax调用示例添加@ResponseBody注释
@RequestMapping("/check") @ResponseBody public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) { boolean a = getSomeResult(); if (a == true) { model.addAttribute("alreadySaved", true); return view; } else { model.addAttribute("alreadySaved", false); return view; } }
控制器部分
您必须为spring ajax调用示例添加@ResponseBody注释
查看零件
$.ajax({ type : "GET", url : "${pageContext.request.contextPath}/check", data : { "id" : ${articleCount} }, success: function(data){ $('#input_field').val(data); } });
当您尝试从ajax请求返回值时,应使用@ResponseBody
注释。 由于您的方法返回类型是String
确保将字符串值而不是视图返回给jsp。
因为它会再次呈现jsp的响应
@ResponseBody public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) { boolean a = getSomeResult(); if (a == true) { return "already saved"; } return "error exist"; }
在你的jsp中,
success: function(data){ alert(data); }
使用@ResponseBody
当您添加@ResponseBody
注释时,Spring会将返回值绑定到传出的HTTP响应正文。
@ResponseBody public String check(@RequestParam Integer id, HttpServletRequest request, HttpServletResponse response, Model model) { boolean a = getSomeResult(); if (a == true) { return "already saved"; } return "error exist"; }
Spring将使用HTTP消息转换器将返回值转换为HTTP响应主体[将对象序列化为响应主体],基于请求HTTP标头中使用的Content-Type。
了解更多信息:
http://websystique.com/springmvc/spring-mvc-requestbody-responsebody-example/