使用jQuery $ .post()从视图发布到Spring控制器不会重定向视图

时间:2018-01-05 22:13:28

标签: jquery spring post

我从另一个页面发布到我网站上的控制器。这是我的$ .post():

$.post({
    url: '/process',
    type: 'POST',
    data: {
        operation: MyObject.operation(),
        sessionId: response.session.id,
        orderId: $('#order-id').val(),
        orderAmount: $('#order-amount').val(),
        orderDescription: $('#order-description').val(),
        redirectUrl: MyObject.redirectUrl()
    }
});

我可以将信息提交给我的控制器:

@PostMapping("/process")
public ModelAndView process(HttpServletRequest httpServletRequest) {

    //...
    // Do something with the request params
    //...

    ModelAndView mav = new ModelAndView("response");
    mav.addObject("status", "SUCCESS!");
    return mav;
}

我可以访问请求参数,但控制器永远不会重定向到视图。为什么是这样?为什么不返回mav对象重定向视图?

2 个答案:

答案 0 :(得分:0)

我相信.post()函数是一个简写的ajax函数。我会将其更改为以下内容:

$.post('/process', 
    // This is the data:
    {
        operation: MyObject.operation(),
        sessionId: response.session.id,
        orderId: $('#order-id').val(),
        orderAmount: $('#order-amount').val(),
        orderDescription: $('#order-description').val()
    },
    //callback success function
    MyObject.redirectUrl()
);

或者,您可以将.post更改为.ajax

$.post({
    url: '/process',
    type: 'POST',
    data: {
        operation: MyObject.operation(),
        sessionId: response.session.id,
        orderId: $('#order-id').val(),
        orderAmount: $('#order-amount').val(),
        orderDescription: $('#order-description').val(),
        // just change to success instead of redirectUrl
        success: MyObject.redirectUrl()
    }
});

答案 1 :(得分:0)

呃,你有点不对劲。 $.post是一个AJAX调用,它无法自动将您重定向到另一个页面,因为它是这样设计的。

每当您使用$.post发起呼叫时,它都会让您回到服务器响应(或错误),但不会单独应用于页面。你需要为它注册一个回调,然后在那里写下你的逻辑。如果要重定向到其他页面,则必须手动更改浏览器的URL。

在您的情况下,似乎服务器返回了一些HTML,因此您需要在页面中显式设置该HTML,并手动更改URL。要对返回的响应执行操作,您可以注册这样的回调:

$.post( ... )
  .done(function(data) {
    // do something with `data` here. It contains the response returned by the server
  });

如果您只想重定向到其他网页,可以尝试在window.location.href回调中设置done