狗万官网酒店 > 狗万官网下载 > Ajax呼吁时无法重定向的题目解决代码详解_javascript艺术

Ajax呼吁时无法重定向的题目解决代码详解_javascript艺术

来源: 2019-08-04 19:43 我来投稿 参与评论
这篇文章主要介绍了Ajax呼吁时无法重定向的题目解决代码详解,顶使用Ajax呼吁时,如果后台进行重定向到任何页面时是心有余而力不足成功之,只能在新石器地址栏输入才能够实现重定向。下我们来看望解决办法吧

前言

当天发现,顶使用Ajax呼吁时,如果后台进行重定向到任何页面时是心有余而力不足成功之,只能在新石器地址栏输入才能够实现重定向。

Ajax默认就是不支持重定向的,其它是一些刷新,不重新加载页面。

要求实现的效果是,自此台网关拦截请求,瞧请求中是否存在token.如果不存在就跳转到登录页面。因为大多数请求都是采取Ajax.一开始发现无法进行重定向,每次都是返回到Ajax的结果处理函数。说到底的消灭办法如下,要求后台和前端进行拍卖。

前台:

/**
*效益描述
* @author lgj
* @Description 重定向工具类
* @date 2/27/19
*/
@Slf4j
public class RedirecUtil {
/**
*效益描述
* @author lgj
* @Description 重定向
* @date 2/27/19
* @param:
* @return:
*
*/
public static void redirect(RequestContext ctx, String redirectUrl){
try{
//如果是Ajax呼吁
if("XMLHttpRequest".equals(ctx.getRequest().getHeader("X-Requested-With"))){
log.debug("ajax redirect");
sendRedirect(ctx.getResponse(),redirectUrl);
}
//如果是浏览器地址栏请求
else {
log.debug("normal redirect ");
ctx.getResponse().sendRedirect(redirectUrl);
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
/**
*效益描述 
* @author lgj
* @Description Ajax呼吁时重定向处理
* @date 2/27/19
* @param: 
* @return: 
*
*/
private static void sendRedirect(HttpServletResponse response, String redirectUrl){
try {
       //此地并不是设置跳转页面,而是将重量定向的地方发给前端,让前端执行重定向
//安装跳转地址
response.setHeader("redirectUrl", redirectUrl);
//安装跳转使能
response.setHeader("enableRedirect","true");
response.flushBuffer();
} catch (IOException ex) {
log.error("Could not redirect to: " + redirectUrl, ex);
}
}
}

前者处理

主要种办法:利用Ajax的complete艺术

$.ajax({
type: "post",
url: "/auth/token/check",
success: function(data,status){
console.log("/token/check 回到 status : "+status)
},
//呼吁完成调用
(XHR, TS){
console.log("complete");
var url = XHR.getResponseHeader("redirectUrl");
console.log("redirectUrl = " + url);
var enable = XHR.getResponseHeader("enaleRedirect");
console.log("enableRedirect = " + enable);
if((enable == "true") && (url != "")){ 
var win = window; 
         while(win != win.top){
      win = win.top;
        }
         win.location.href = url; 
          } 
      }, 
    });
})

但是上面有个问题就是,每个ajax都要求编写 comlete 艺术,代码复用率低。

老二种方式 : 利用全局的complete艺术

ajax呼吁

$("#NON-TOKEN").click(function () {
$.ajax({
type: "post",
url: "/auth/token/check",
success: function(data,status){
console.log("/token/check 回到 status : "+status)
},
});

全局处理

瞩目这参数(event, xhr, settings)决不能丢掉,否则会报错。

//每一个Ajax 呼吁完成后都会执行。
$(document).ajaxComplete(function (event, xhr, settings) {
console.log("ajaxComplete ")
redirectHandle(xhr);
})
function redirectHandle(xhr) {
  //获取后台返回的平均数
var url = xhr.getResponseHeader("redirectUrl");
console.log("redirectUrl = " + url);
var enable = xhr.getResponseHeader("enableRedirect");
if((enable == "true") && (url != "")){
var win = window;
while(win != win.top){
win = win.top;
}
win.location.href = url;
}
}

也得以将上述前端代码放入一个js文件中,在需求开展重定向的时光引入即可,便足以实现更高的编码复用率。

redirect.js

function redirectHandle(xhr) {
var url = xhr.getResponseHeader("redirectUrl");
console.log("redirectUrl = " + url);
var enable = xhr.getResponseHeader("enableRedirect");
if((enable == "true") && (url != "")){
var win = window;
while(win != win.top){
win = win.top;
}
win.location.href = url;
}
}
$(function () {
$(document).ajaxComplete(function (event, xhr, settings) {
console.log("ajaxComplete adffdafadsaf")
redirectHandle(xhr);
})
})

引入js文件,src根据据实际情形设置。

<script src="/common/redirect.js"></script>

上述就是本文的方方面面内容,瞩望对大家的上学有所帮助,也愿意大家多多支持脚本的师。

义务编辑:狗万官网酒店
 
 
0% (0)
 
 
0% (0)
机长评论( ) 请自觉遵守互联网相关的富民政策法规,不准发布色情、暴力、反动的议论。
地名: 匿名?
    1. &lt;dt id="0f19c174"&gt;&lt;/dt&gt;