我从另一个页面发布到我网站上的控制器。这是我的$ .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对象重定向视图?
答案 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
。