从jquery发帖子。 POST正在发生,但无法访问控制器添加的模型属性。
JQuery代码:
$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {
var jsonlog = "${logJson}"
if (data === "SUCCESS") {
alert(jsonlog);
}
});
控制器:
public String savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException
{
try
{
//Code to populate log
model.addAttribute("logJson", log.getLog());
return "success";
}
}
POST工作正常,控制器方法正在成功执行。实际代码中有一个catch.Removed,因为它是多余的。
可能是什么问题。 这条线不起作用。 var jsonlog =“$ {logJson}” 模型属性或jquery有问题吗?
谢谢。
答案 0 :(得分:0)
看起来您混淆了生成页面的请求(包含AJAX表单)以及在AJAX POST发生时调用的请求。
var jsonlog = "${logJson}"
只会在第一个(页面)请求中填充。一旦呈现,AJAX POST就无法将JSTL值注入页面。
您需要将来自AJAX POST的响应中的值作为文本或JSON数据发送,然后从.POST回调中的data
var中读取该值。添加@ResponseBody
注释告诉Spring返回JSON(可能需要添加Jackson库)并返回Map ...
public @ResponseBody Map<String, String> savedLog(@RequestParam(value = "requestId", required = true) LogRequest request, ModelMap model) throws IOException {
try {
//Code to populate log
//model.addAttribute("logJson", log.getLog());
Map <String, String> map = new HashMap<String, String>();
map.put("logJson", log.getLog());
return map;
}
然后在AJAX代码中,阅读:
$.post('<c:url value="/savedLog.form" />', $('#logForm').serialize(), function(data, textStatus) {
if (data.logJson) {
alert(data.logJson);
}
}, "json"); // Note JSON dataType specified here
注意:您不应该返回成功&#34;成功&#34;作为控制器中的文本。使用HTTP代码,例如如果发生错误,则抛出404或500(通过HttpServletResponse对象),否则当您返回地图时状态将自动为200.