最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ajax請求時無法重定向的問題解決代碼詳解

 更新時間:2019年06月21日 10:09:44   作者:冬眠的山谷  
這篇文章主要介紹了Ajax請求時無法重定向的問題解決代碼詳解,當使用Ajax請求時,如果后臺進行重定向到其他頁面時是無法成功的,只能在瀏覽器地址欄輸入才能夠實現(xiàn)重定向。下面我們來看看解決方法吧

前言

今天發(fā)現(xiàn),當使用Ajax請求時,如果后臺進行重定向到其他頁面時是無法成功的,只能在瀏覽器地址欄輸入才能夠實現(xiàn)重定向。

Ajax默認就是不支持重定向的,它是局部刷新,不重新加載頁面。

需要實現(xiàn)的功能是,后臺網關攔截請求,看請求中是否存在token.如果不存在就跳轉到登錄頁面。因為大多數(shù)請求都是使用Ajax.一開始發(fā)現(xiàn)無法進行重定向,每次都是返回到Ajax的結果處理函數(shù)。最終的解決辦法如下,需要后臺和前端進行處理。

后臺:

/**
*功能描述
* @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 {
       //這里并不是設置跳轉頁面,而是將重定向的地址發(fā)給前端,讓前端執(zhí)行重定向
//設置跳轉地址
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)
},
});

全局處理

注意這參數(shù)(event, xhr, settings)不能少,否則會報錯。

//每一個Ajax 請求完成之后都會執(zhí)行。
$(document).ajaxComplete(function (event, xhr, settings) {
console.log("ajaxComplete ")
redirectHandle(xhr);
})
function redirectHandle(xhr) {
  //獲取后臺返回的參數(shù)
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文件中,在需要進行重定向的時候引入即可,便可以實現(xiàn)更高的代碼復用率。

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根據(jù)據(jù)實際情況設置。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 一文詳細分析前端請求中的“Unsupported?Media?Type”問題

    一文詳細分析前端請求中的“Unsupported?Media?Type”問題

    在Web開發(fā)中,前后端交互頻繁遇到HTTP狀態(tài)碼415錯誤,這表明服務器無法處理因Content-Type不匹配的請求,常見于POST或PUT請求,必須確保請求頭中的Content-Type與服務器期望的一致,跨域請求中,需要的朋友可以參考下
    2024-10-10
  • 詳解JavaScript的懶加載是如何實現(xiàn)的

    詳解JavaScript的懶加載是如何實現(xiàn)的

    懶加載(Lazy Loading)是一種在軟件開發(fā)中常用的優(yōu)化技術,它主要用于延遲加載資源,直到真正需要使用的時候才進行加載,這樣可以減少初始加載的時間和資源消耗,并提升用戶體驗,本文給大家詳細介紹了JavaScript的懶加載是如何實現(xiàn)的,需要的朋友可以參考下
    2024-01-01
  • javascript遍歷對象的五種方式實例代碼

    javascript遍歷對象的五種方式實例代碼

    在我們日常工作過程中,我們對于javaScript遍歷對象、數(shù)組的操作是十分的頻繁的,這篇文章主要給大家介紹了關于javascript遍歷對象的五種方式,需要的朋友可以參考下
    2021-10-10
  • javascript常用的方法整理

    javascript常用的方法整理

    JAVASCRIPT是AJAX技術中不可或缺的一部分,所以想學好AJAX以及現(xiàn)在流行的AJAX框架,學好JAVASCRIPT是最重要的。這章我給大家整理了一些JAVASCRIPT的基礎知識、常用代碼和事件匯總。
    2015-08-08
  • 了解Javascript的模塊化開發(fā)

    了解Javascript的模塊化開發(fā)

    這篇文章主要介紹了了解Javascript的模塊化開發(fā),本文講解了為什么需要模塊化開發(fā),模塊化開發(fā)的形成原因等內容,需要的朋友可以參考下
    2015-03-03
  • JavaScript事件學習小結(一)事件流

    JavaScript事件學習小結(一)事件流

    這篇文章主要介紹了JavaScript事件學習小結(一)事件流的相關資料,需要的朋友可以參考下
    2016-06-06
  • ejs v9 javascript模板系統(tǒng)

    ejs v9 javascript模板系統(tǒng)

    我的模板系統(tǒng)升一下級, 繼續(xù)在新公司里面用。 現(xiàn)在幾在互聯(lián)網公司沒有不用javascript模板了, 什么TX, 百度, 新浪, 360什么的, 最后瀑布流的流行, 里面又有許多用到模板
    2012-03-03
  • javascript實現(xiàn)json頁面分頁實例代碼

    javascript實現(xiàn)json頁面分頁實例代碼

    這篇文章主要介紹了javascript實現(xiàn)json頁面分頁實例代碼,需要的朋友可以參考下
    2014-02-02
  • javascript window.onerror事件學習新收獲

    javascript window.onerror事件學習新收獲

    javascript window.onerror事件學習新收獲...
    2007-11-11
  • Js四則運算函數(shù)代碼

    Js四則運算函數(shù)代碼

    javascript的除法結果會有誤差,在兩個浮點數(shù)相除的時候會比較明顯。這個函數(shù)返回較為精確的除法結果
    2012-07-07

最新評論

丽水市| 石阡县| 舞钢市| 勐海县| 乌海市| 荥阳市| 咸宁市| 定远县| 嘉祥县| 新河县| 泗阳县| 木里| 禄丰县| 开阳县| 孟津县| 诸暨市| 南投县| 当雄县| 龙江县| 福海县| 云浮市| 忻州市| 桐梓县| 三亚市| 滁州市| 沙雅县| 枣庄市| 锡林浩特市| 晴隆县| 巴林左旗| 陆良县| 嘉定区| 锦屏县| 博野县| 荥阳市| 绿春县| 上虞市| 蕲春县| 武鸣县| 江孜县| 耿马|