ajax请求遇到response.sendRedirect() 302无法重定向? ? ?

1.问题如下:

前端发起ajax请求 -> 后端拦截器进行校验(preHandle) -> 发现用户失效 -> 重定向到登录页( response.sendRedirect() )

通过F12, 我们可以看到方法已经执行, 但是页面没有跳转过去? ? ?

在这里插入图片描述

2.问题分析:

ajax的机制, 就是通过XMLHttpRequest对象向服务器发送请求,从服务器获取数据! 除此之外它不能做以外的其它动作了。
ajax功能就是这么设定的, ajax也是这么做的, 它的作用也仅仅局限于此, 所以浏览器端是不会发起重定向的, 不会重新加载页面的。

3.解决办法:

只能通过服务器端告诉 ajax, 请求失效了, 让它location.href = “”, 跳转到登录页面.

1.过滤器里再加个ajax请求判断,

   /**
     * ajax请求重定向问题的处理方法
     */
    public void ajaxRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
            response.setHeader("REDIRECT", "REDIRECT"); //表示重定向
            response.setHeader("CONTENTPATH", request.getContextPath() + "/index"); //重定向的路径
            response.setStatus(HttpServletResponse.SC_FORBIDDEN); //拒绝访问.
        } else {
            response.sendRedirect(request.getContextPath() + "/index");
        }
    }

2."XMLHttpRequest"表明就是ajax请求
在这里插入图片描述

3.前端js加一个方法, 进行跳转.

var jqxhr;
//设置ajax请求完成后运行的函数,
$.ajaxSetup({ 
	complete:function(){
		if("REDIRECT" == jqxhr.getResponseHeader("REDIRECT")){ //若HEADER中含有REDIRECT说明后端想重定向,
			var win = window;
			while(win != win.top){
				win = win.top;
			}
			win.location.href = jqxhr.getResponseHeader("CONTENTPATH");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
		}
    }
});
发布了107 篇原创文章 · 获赞 173 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_42986107/article/details/104059289