<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    vickzhu

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      151 隨筆 :: 0 文章 :: 34 評論 :: 0 Trackbacks

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

    不管是那種類型的http請求總是可以由一個過濾器來捕捉。
    分類:普通http請求的header參數中沒有x-requested-with:XMLHttpRequest頭信息,而異步的有。
    其實對于常見的ajax框架,header中還有標示自己身份的header信息。

    對于普通的http請求,發現session超時后直接重定向到一個超時頁面,顯示訪問超時。
    對于異步http請求,發現session超時后則向請求的response中寫入特定的超時頭信息,客戶端ajax對象檢測
    頭信息,發現有超時狀態標志后調用顯示超時信息的javascript方法,提示用戶訪問超時。

    服務器端session超時后在過濾器中為response添加新的頭信息,標記該請求超時:

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

    使用Ext.Ajaxt對象完成異步請求交互,假如checkUserSessionStatus是你的回調方法,每個頁面引用:

    Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
    function checkUserSessionStatus(conn,response,options){
    //Ext重新封裝了response對象
    if(typeof response.getResponseHeader.sessionstatus != 'undefined'){
    //發現請求超時,退出處理代碼...
    }
    }
    可以利用的幾個特性:
    a)所有的ajax請求均帶有x-requested-with:XMLHttpRequest頭信息
    b)Ext.Ajax是單實例對象(非常重要,全局單一Ext.Ajax實例!)
    c)注冊Ext.Ajax的requestcomplete事件,每個ajax請求成功后首先響應該事件(概念類似spring的aop攔截)。
    jquery提供了幾個全局事件可以用來處理session過期請求,如當ajax請求開始時會觸發ajaxStart()方法的回調函數;
    當ajax請求結束時,會觸發ajaxStop()方法的回調函數。這些方法都是全局的方法,因此無論創建它們的代碼位于何處,
    只要有ajax請求發生時,都會觸發它們。類似的事件還有:ajaxComplete(),ajaxError(),ajaxSend(),ajaxSuccess()等。
    如果使某個ajax請求不受全局方法的影響,那么可以在使用$.ajax()方法時,將參數中的global設置為false,jquery代碼如下:
    $.ajax({
        url:"test.html",
        global:false//不觸發全局ajax事件


    })

     對于其他的ajax框架,解決用戶訪問請求超時這個問題的思路是類似的。

    在這里推薦一個很實用的Js方法:

    function getRootWin(){
    var win = window;
    while (win != win.parent){
    win = win.parent;
    }
    return win;
    }
    

     

    通過該方法,可以在一個任意深度的iframe中調用父iframe中的方法。具體到這里就是無論哪一個iframe中的用戶訪

    問請求超時,都可以通過該方法調用最外層iframe中的退出方法,這樣便為用戶提供了一個統一的訪問超時退出的UI

    呈現。

    posted on 2009-06-05 15:54 筱 筱 閱讀(3476) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲好看的理论片电影| 亚洲日韩VA无码中文字幕| 亚洲国产综合专区电影在线| 一级毛片免费视频网站| 亚洲国产精品无码久久青草| 免费VA在线观看无码| 亚洲AV无码一区二三区 | 亚洲综合在线成人一区| 国产麻豆成人传媒免费观看| 在线观看日本亚洲一区| 18禁成年无码免费网站无遮挡| 亚洲中文久久精品无码1| 在线观看H网址免费入口| 亚洲一区动漫卡通在线播放| 四虎国产精品免费久久| 亚洲精品乱码久久久久久蜜桃图片| 亚洲麻豆精品国偷自产在线91| 五月天婷婷免费视频| 国产日韩亚洲大尺度高清| 亚洲成熟丰满熟妇高潮XXXXX| 国产精品深夜福利免费观看| 四虎影视久久久免费观看| 国产亚洲AV夜间福利香蕉149| 国产一区二区三区免费| 亚洲成a人片在线观看中文!!!| 成人免费无毒在线观看网站 | 成人午夜免费福利视频| 亚洲精品无码久久久久牙蜜区| 四虎影视免费永久在线观看| 中文字幕无线码免费人妻| 久久久无码精品亚洲日韩按摩 | 亚洲av成人中文无码专区| 久久久久亚洲精品无码网址 | 亚洲精品福利你懂| 国产91在线免费| 国内精品久久久久影院免费| wwwxxx亚洲| 国产成人亚洲综合无码精品| 免费中文熟妇在线影片| 中文字幕不卡免费高清视频| 亚洲一区在线免费观看|