国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

Ajax請(qǐng)求時(shí)無(wú)法重定向的問(wèn)題解決代碼詳解

2024-05-06 15:37:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

今天發(fā)現(xiàn),當(dāng)使用Ajax請(qǐng)求時(shí),如果后臺(tái)進(jìn)行重定向到其他頁(yè)面時(shí)是無(wú)法成功的,只能在瀏覽器地址欄輸入才能夠?qū)崿F(xiàn)重定向。

Ajax默認(rèn)就是不支持重定向的,它是局部刷新,不重新加載頁(yè)面。

需要實(shí)現(xiàn)的功能是,后臺(tái)網(wǎng)關(guān)攔截請(qǐng)求,看請(qǐng)求中是否存在token.如果不存在就跳轉(zhuǎn)到登錄頁(yè)面。因?yàn)榇蠖鄶?shù)請(qǐng)求都是使用Ajax.一開(kāi)始發(fā)現(xiàn)無(wú)法進(jìn)行重定向,每次都是返回到Ajax的結(jié)果處理函數(shù)。最終的解決辦法如下,需要后臺(tái)和前端進(jìn)行處理。

后臺(tái):

/***功能描述* @author lgj* @Description 重定向工具類* @date 2/27/19*/@Slf4jpublic class RedirecUtil {/***功能描述* @author lgj* @Description 重定向* @date 2/27/19* @param:* @return:**/public static void redirect(RequestContext ctx, String redirectUrl){try{//如果是Ajax請(qǐng)求if("XMLHttpRequest".equals(ctx.getRequest().getHeader("X-Requested-With"))){log.debug("ajax redirect");sendRedirect(ctx.getResponse(),redirectUrl);}//如果是瀏覽器地址欄請(qǐng)求else {log.debug("normal redirect ");ctx.getResponse().sendRedirect(redirectUrl);}}catch(Exception ex){ex.printStackTrace();}}/***功能描述 * @author lgj* @Description Ajax請(qǐng)求時(shí)重定向處理* @date 2/27/19* @param: * @return: **/private static void sendRedirect(HttpServletResponse response, String redirectUrl){try {       //這里并不是設(shè)置跳轉(zhuǎn)頁(yè)面,而是將重定向的地址發(fā)給前端,讓前端執(zhí)行重定向//設(shè)置跳轉(zhuǎn)地址response.setHeader("redirectUrl", redirectUrl);//設(shè)置跳轉(zhuǎn)使能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)},//請(qǐng)求完成調(diào)用(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;           }       },     });})

但是上面有個(gè)問(wèn)題就是,每個(gè)ajax都需要編寫(xiě) comlete 方法,代碼復(fù)用率低。

第二種方法 : 使用全局的complete方法

ajax請(qǐng)求

$("#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)不能少,否則會(huì)報(bào)錯(cuò)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 得荣县| 南溪县| 礼泉县| 清新县| 加查县| 达孜县| 古丈县| 如东县| 旬邑县| 兖州市| 屏山县| 乌恰县| 从江县| 贵南县| 乌鲁木齐县| 临猗县| 新民市| 宣武区| 富顺县| 尤溪县| 鄂尔多斯市| 安阳市| 黄大仙区| 巴南区| 霍林郭勒市| 山阳县| 睢宁县| 安化县| 丹巴县| 兴义市| 阳朔县| 巴青县| 璧山县| 商南县| 理塘县| 海淀区| 上思县| 临澧县| 兴文县| 德令哈市| 民权县|