后端页面无法跳转问题(ajax异步请求方式)
一、原因:
在表单中使用了ajax请求,即使后端Controller使用了redirect重定向也无法跳转页面。
二、什么是ajax请求? $.post
//监听提交:ajax请求
form.on('submit(registerForm)', function(data){
var username=$("#username").val();
var password=$("#password").val();
var phone=$("#phone").val();
var roleId=$("#roleId").val();
var remark=$("#remark").val();
var json={'username':username,'password':password,'phone':phone,'roleId':roleId,'remark':remark};
$.post("${pageContext.request.contextPath}/user/register",json,function (data) {})
});
此处ajax请求即使后端使用了重定向都无法跳转页面
三、什么是正常请求?
<form class="layui-form layui-form-pane" method="post" action="${pageContext.request.contextPath}/user/register">
此处的请求后端使用重定向能正常请求
四、后端代码
@RequestMapping("register")
public String register(User user) throws UnsupportedEncodingException {
log.debug("接收到用户名:{}, 接收到密码:{}",user.getUsername(),user.getPassword());
try{
userService.register(user);
}catch(RuntimeException exception){
exception.printStackTrace();
return "redirect:/register.jsp?msg="+ URLEncoder.encode(exception.getMessage(),"UTF-8");
}
return "redirect:/index.jsp";
}
如何查看请求是否成功?
在浏览器端按F12查看网络请求是否成功,若是成功并且响应302状态码就表示后端重定向起了作用,但是由于是ajax请求所以页面还是原来的页面,所以解决办法有以下两种。
解决方法一:
因为ajax请求是异步请求,局部刷新的方式,所以使用重定向也无法跳转到其他的页面,如果想要跳转页面则需要在前端利用通过location.href来跳转。
解决方法二:
不要使用ajax请求,换成普通的请求,即可使用重定向来跳转页面。