基本上我的方案是我试图通过使用ajax post将3个对象的列表作为字符串发送到我的控制器,如下所示。
AJAX调用的JavaScript函数:
$.ajax({
type: 'POST',
dataType: 'json',
url: "ajaxEditFormUpdate",
data: JSON.stringify(newData),
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
}
});
myController的:
@RequestMapping(value = "ajaxEditFormUpdate", method = RequestMethod.POST)
@ResponseBody
public ModelAndView handleResponse(@RequestBody String records) {
System.out.println(records);
String viewName = "content/review";
ModelAndView mav = new ModelAndView();
mav.setViewName(viewName);
return mav;
}
在这里,我希望我的页面被重定向到审查(jsp)页面,但在我的情况下发生的是它仍然保留在同一页面但在网络的响应部分(在chrome dev工具中),我可以看到我的JSP页面采用html格式,但页面没有呈现。有没有办法可以呈现评论页面?
答案 0 :(得分:0)
您无法转到您在POST请求的响应中收到的页面。 但您可以将成功添加到ajax:
$.ajax({
type: 'POST',
dataType: 'json',
url: "ajaxEditFormUpdate",
data: JSON.stringify(newData),
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function (response) {
window.location.href = '/content/review';
}
});
你的控制器现在看起来像这样:
@RequestMapping(value = "ajaxEditFormUpdate", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Void> handleResponse(@RequestBody String records) {
System.out.println(records);
return new ResponseEntity<>(HttpStatus.OK);
}
但现在您还需要使用GET创建新控制器以返回/content/review
页面
p.s。如果您仍然希望在不更改任何控制器的情况下呈现页面,则另一个变体似乎是黑客攻击,您的成功必须如下:
success: function (response) {
document.open();
document.write(response);
document.close();
}
但不推荐这种方法。