我在ajax
页面上有jsp
,它通过网址/check
调用弹簧控制器。
$.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)
中以"${alreadySaved}"
的形式访问它,但它显示为空白。
我有什么方法可以在视图页面上收到true/false
数据吗?
答案 0 :(得分:9)
您必须为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;
}
}
答案 1 :(得分:1)
当您尝试从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);
}
答案 2 :(得分:1)
使用null
当您添加@ResponseBody
注释时,Spring会将返回值绑定到传出的HTTP响应正文。
@ResponseBody
Spring将使用HTTP消息转换器将返回值转换为HTTP响应主体[将对象序列化为响应主体],基于请求HTTP标头中使用的Content-Type。
了解更多信息:
http://websystique.com/springmvc/spring-mvc-requestbody-responsebody-example/
答案 3 :(得分:0)
控制器部分
您必须为spring ajax调用示例添加@ResponseBody注释
查看零件
$.ajax({
type : "GET",
url : "${pageContext.request.contextPath}/check",
data : {
"id" : ${articleCount}
},
success: function(data){
$('#input_field').val(data);
}
});