日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

jquery ajax方法調(diào)用在session超時(shí)以后如何跳轉(zhuǎn)到登錄頁(yè)面?

 且看且珍惜 2014-05-04
jquery ajax方法調(diào)用在session超時(shí)以后如何跳轉(zhuǎn)到登錄頁(yè)面?

session超時(shí)以后雖然被過(guò)濾器過(guò)濾到了,但是并不會(huì)跳轉(zhuǎn)到登錄頁(yè)面請(qǐng)求具體的解決方法。

我參考了這篇文章,但是我調(diào)用ajaxStart不起作用。

http://www./vickzhu/archive/2009/06/05/280223.html

ext jquery 用戶訪問(wèn)超時(shí)(ext session過(guò)期)

解決兩種情況下的用戶訪問(wèn)超時(shí)。
a)普通http請(qǐng)求的session超時(shí)。
b)異步http請(qǐng)求的session超時(shí),使用ext后大部分的界面刷新都是異步的ajax請(qǐng)求。

不管是那種類(lèi)型的http請(qǐng)求總是可以由一個(gè)過(guò)濾器來(lái)捕捉。
分類(lèi):普通http請(qǐng)求的header參數(shù)中沒(méi)有x-requested-with:XMLHttpRequest頭信息,而異步的有。
其實(shí)對(duì)于常見(jiàn)的ajax框架,header中還有標(biāo)示自己身份的header信息。

對(duì)于普通的http請(qǐng)求,發(fā)現(xiàn)session超時(shí)后直接重定向到一個(gè)超時(shí)頁(yè)面,顯示訪問(wèn)超時(shí)。
對(duì)于異步http請(qǐng)求,發(fā)現(xiàn)session超時(shí)后則向請(qǐng)求的response中寫(xiě)入特定的超時(shí)頭信息,客戶端ajax對(duì)象檢測(cè)
頭信息,發(fā)現(xiàn)有超時(shí)狀態(tài)標(biāo)志后調(diào)用顯示超時(shí)信息的javascript方法,提示用戶訪問(wèn)超時(shí)。

服務(wù)器端session超時(shí)后在過(guò)濾器中為response添加新的頭信息,標(biāo)記該請(qǐng)求超時(shí):

if(r.getHeader("x-requested-with")!=null
&& r.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
response.setHeader("sessionstatus","timeout");
}
使用Ext.Ajaxt對(duì)象完成異步請(qǐng)求的交互,Ext.Ajax是單實(shí)例對(duì)象(非常重要,全局單一Ext.Ajax實(shí)例!)。
注冊(cè)Ext.Ajax的requestcomplete事件,每個(gè)ajax請(qǐng)求成功后首先響應(yīng)該事件。在該事件的回調(diào)函數(shù)里面判斷
訪問(wèn)請(qǐng)求是否超時(shí)。使用Ext.Ajax對(duì)象的好處是,只需要引入一個(gè)包含了幾行超時(shí)處理代碼的js文件,就可以
為當(dāng)前應(yīng)用增加超時(shí)處理功能,原有代碼不需要做任何修改。


使用Ext.Ajaxt對(duì)象完成異步請(qǐng)求交互,假如checkUserSessionStatus是你的回調(diào)方法,每個(gè)頁(yè)面引用:

Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
function checkUserSessionStatus(conn,response,options){
//Ext重新封裝了response對(duì)象
if(typeof response.getResponseHeader.sessionstatus != 'undefined'){
//發(fā)現(xiàn)請(qǐng)求超時(shí),退出處理代碼...
}
}
可以利用的幾個(gè)特性:a)所有的ajax請(qǐng)求均帶有x-requested-with:XMLHttpRequest頭信息b)Ext.Ajax是單實(shí)例對(duì)象(非常重要,全局單一Ext.Ajax實(shí)例?。ヽ)注冊(cè)Ext.Ajax的requestcomplete事件,每個(gè)ajax請(qǐng)求成功后首先響應(yīng)該事件(概念類(lèi)似spring的aop攔截)。
jquery提供了幾個(gè)全局事件可以用來(lái)處理session過(guò)期請(qǐng)求,如當(dāng)ajax請(qǐng)求開(kāi)始時(shí)會(huì)觸發(fā)ajaxStart()方法的回調(diào)函數(shù);當(dāng)ajax請(qǐng)求結(jié)束時(shí),會(huì)觸發(fā)ajaxStop()方法的回調(diào)函數(shù)。這些方法都是全局的方法,因此無(wú)論創(chuàng)建它們的代碼位于何處,只要有ajax請(qǐng)求發(fā)生時(shí),都會(huì)觸發(fā)它們。類(lèi)似的事件還有:ajaxComplete(),ajaxError(),ajaxSend(),ajaxSuccess()等。
如果使某個(gè)ajax請(qǐng)求不受全局方法的影響,那么可以在使用$.ajax()方法時(shí),將參數(shù)中的global設(shè)置為false,jquery代碼如下:$.ajax({    url:"test.html",    global:false//不觸發(fā)全局ajax事件})
對(duì)于其他的ajax框架,解決用戶訪問(wèn)請(qǐng)求超時(shí)這個(gè)問(wèn)題的思路是類(lèi)似的。


問(wèn)題補(bǔ)充:
myali88 寫(xiě)道
這篇文章講的方法可行啦,是不是作者自己的代碼有問(wèn)題?


java代碼:

當(dāng)用戶session過(guò)期時(shí):

if(request.getHeader("x-requested-with")!=null
&&request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
PrintWriter printWriter = response.getWriter();
printWriter.print("{sessionState:0}");
printWriter.flush();
printWriter.close();
}

js部分的代碼:

/**
設(shè)置jquery的ajax全局請(qǐng)求參數(shù)
*/
  $.ajaxSetup({
         contentType:"application/x-www-form-urlencoded;charset=utf-8",
         timeout:5,
         cache:false,
         complete:function(XMLHttpRequest,textStatus){
        var resText=XMLHttpRequest.responseText;
        if(resText!=null&&resText!=""){
        var res=eval("(" + resText + ")");
        if(res.sessionState==0){
     window.open(jsContextPath+'/login.jsp','_top');

        }
       
       
        }
     }
  });

但是這樣在session未過(guò)期的時(shí)候,ajax請(qǐng)求會(huì)導(dǎo)致一些錯(cuò)誤。

我究竟應(yīng)該用jquery的哪個(gè)方法呢?

問(wèn)題補(bǔ)充:
myali88 寫(xiě)道
引用
但是這樣在session未過(guò)期的時(shí)候,ajax請(qǐng)求會(huì)導(dǎo)致一些錯(cuò)誤。

導(dǎo)致的錯(cuò)誤是什么?



找到錯(cuò)誤了,這句代碼出錯(cuò)了
var res=eval("(" + resText + ")");
因?yàn)轫?xiàng)目中使用了easyui,有些頁(yè)面是easyui調(diào)用的,整個(gè)頁(yè)面也認(rèn)為是一個(gè)ajax請(qǐng)求了,但是整個(gè)頁(yè)面并不是 json格式。



$.ajaxSetup({
         contentType:"application/x-www-form-urlencoded;charset=utf-8",
         timeout:pageTimeout,
         cache:false
         ,
         complete:function(XHR,TS){
        var resText=XHR.responseText;
        if(resText=="{sessionState:0}"){
        var nav=judgeNavigator();
     if(nav.indexOf("IE:6")>-1){
   window.opener=null;
   window.close();
   window.open(jsContextPath+'/login.jsp','');
}else{
window.open(jsContextPath+'/login.jsp','_top');
}
        }
     }
  });
       

這樣就搞定了。

謝謝啦

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多