十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本文實(shí)例講述了JS Ajax請(qǐng)求會(huì)話過(guò)期處理問(wèn)題解決方法。分享給大家供大家參考,具體如下:
10年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁(yè)制作,對(duì)圍欄護(hù)欄等多個(gè)行業(yè),擁有多年的營(yíng)銷推廣經(jīng)驗(yàn)。
對(duì)于頁(yè)面來(lái)說(shuō),處理session過(guò)期比較簡(jiǎn)單,一般只需在過(guò)濾器里面判斷session用戶是否存在,不存在則跳轉(zhuǎn)頁(yè)面到登陸頁(yè)即可。
對(duì)于Ajax請(qǐng)求來(lái)說(shuō),這個(gè)辦法則無(wú)效,只能獲取到登錄頁(yè)的html代碼。原因在于Ajax請(qǐng)求是XMLHTTPRequest
對(duì)象發(fā)起的而不是瀏覽器,而服務(wù)器返回的信息接收者也是XMLHTTPRequest
,非瀏覽器。
解決辦法:
服務(wù)器端
可在返回的ResponseHeader
里添加一個(gè)標(biāo)識(shí)變量,以便在Javascript里處理。以Java為例,可在過(guò)濾器里進(jìn)行如下處理:
try { // Ajax請(qǐng)求會(huì)話過(guò)期處理 String requestType = request.getHeader("X-Requested-With"); if (StringUtils.isNotEmpty(requestType) && requestType.equalsIgnoreCase("XMLHttpRequest")) { response.setHeader("SessionStatus", "sessionTimeOut"); requestContext.abortWith(Response.status(401).build()); return; } // 處理頁(yè)面跳轉(zhuǎn) requestContext.abortWith(Response.accepted().build()); response.sendRedirect(loginPath); } catch (IOException ex) { //do nothing }
Javascript端
可通過(guò)JQuery的ajaxComplete
方法進(jìn)行處理,判斷發(fā)送請(qǐng)求時(shí)是否會(huì)話已過(guò)期。
/** * ajax請(qǐng)求判斷會(huì)話是否已過(guò)期 */ $(document).ajaxError(function (event, jqXHR, options, errorMsg) { var sessionStatus = jqXHR.getResponseHeader('SessionStatus'); if (sessionStatus && sessionStatus === 'sessionTimeOut') { alert("您的會(huì)話已過(guò)期,請(qǐng)重新登錄"); location.href = "login"; } });
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript中ajax操作技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。