Ajax请求如何重定向

背景

在前端使用Ajax请求,后端使用HttpServletResponse.sendRedirect(“URL”);的情况下,页面并未发生跳转,这是为什么呢?

原因

默认ajax是不支持重定向的,因为ajax本身就是局部刷新,不重新加载页面的。

解决方法

后端java设置重定向Header

HttpServletResponse response = CommonUtils.getHttpServletResponse();
HttpServletRequest request = CommonUtils.getHttpServletRequest();
//告诉ajax我要重定向
response.setHeader("REDIRECT", "REDIRECT");
//告诉ajax我重定向的路径
response.setHeader("CONTENTPATH", loginJumpUrl + "&NextAction=" + URLEncoder.encode(request.getHeader("referer"), "utf8"));

前端common.js全局设置ajax请求完成后处理逻辑

//设置全局ajax处理逻辑
$.ajaxSetup({
    //设置ajax请求结束后的执行动作
    complete: function (xhr) {
        // 通过XMLHttpRequest取得响应头,sessionstatus
        if("REDIRECT" == xhr.getResponseHeader("REDIRECT")){ //若HEADER中含有REDIRECT说明后端想重定向,
            var win = window;
            while(win != win.top){
                win = win.top;
            }
            win.location.href = xhr.getResponseHeader("CONTENTPATH");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求
        }
    }
});

版权声明:本文为growing1224原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/growing1224/article/details/120127291