一尘不染

在springmvc中的ajax发布调用之后,有什么方法可以将我的页面(jsp)重定向到另一个页面(jsp)

spring-mvc

基本上,我的情况是我尝试通过使用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;
    }

在这里,我希望将页面重定向到review(jsp)页面,但是在我的情况下,它仍然保留在同一页面中,但是在网络的响应部分(在chrome
dev工具中),我可以看到我的JSP页面以html格式显示,但页面未呈现。有什么方法可以渲染评论页面?


阅读 281

收藏
2020-06-01

共1个答案

一尘不染

您无法进入对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页面视图

ps 如果您仍想在不更改任何控制器的情况下呈现页面,则另一个变种似乎是一种破解,您的成功必须是这样的:

success: function (response) {
        document.open();
        document.write(response);
        document.close();
    }

但是不建议使用此方法。

2020-06-01