如何通过ajax从spring控制器获取数据?
Posted
技术标签:
【中文标题】如何通过ajax从spring控制器获取数据?【英文标题】:How can I get data from spring controller by ajax? 【发布时间】:2015-01-03 21:04:06 【问题描述】:我在 jsp
页面上有一个 ajax
通过 URL /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
数据?
【问题讨论】:
【参考方案1】:您必须为 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;
【讨论】:
好的。如何在视图方面获得响应? 表示视图为空。请返回模型对象作为响应。 不,视图不是空的。视图由 springmvc servlet 中的 spring 注入。它是一个解析为加载 JSP 的字符串。 我有一些误解。我现在明白了。谢谢:)【参考方案2】:使用@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/
【讨论】:
【参考方案3】:控制器部分
您必须为 spring ajax 调用示例添加 @ResponseBody 注释
查看部分
$.ajax(
type : "GET",
url : "$pageContext.request.contextPath/check",
data :
"id" : $articleCount
,
success: function(data)
$('#input_field').val(data);
);
【讨论】:
【参考方案4】:当您尝试从 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);
【讨论】:
但我需要从该方法返回视图,因为没有它,spring 将无法加载 jsp。 @najus 不,ajax 的概念是刷新页面的一部分,因此仅发送返回值就足够了。当您加载同一页面时以上是关于如何通过ajax从spring控制器获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter - 如何从 ajax 获取数据表数据?