對jQuery ajax請求成功(失敗)回調執行前的統一處理

目前的項目中有這樣的需求,如果用戶的狀態因已登錄太久已經失效(登錄超時,用戶自己不知道),用戶在操作發起一個ajax請求的時候服務端是無法返回有效數據的,而ajax請求的狀態還是成功,會執行配置項裏的success函數參數或者done的異步回調。這時需要我們在請求成功後判斷用戶是否已經登錄超時,在每一個ajax的成功回調里加是不現實的的,我們需要做統一處理。 如果我們能夠截獲到所返回的data數據,然後判斷其某個屬性值是否是超時狀態值即可,如果是則可以跳轉到登陸頁(這裏我們讓請求數據裏面返回超時狀態 code:10)。代碼如下:

var ajax = $.ajax;        
$.ajax = function (opt) {            
    //備份opt中error和success方法            
    var fn = {                
        success: function (data, textStatus, jqXHR) { 

        }
    }            
    if (opt.success) {                
        fn.success = opt.success;            
    }
    //擴展增強處理            
    var _opt = $.extend(opt, {                
        success: function (data, textStatus, jqXHR) {                    
            //重寫success事件'                  
            if (data.code == '10') { //截獲請求數據  如果code=10 頁面跳轉到登錄界面                       
                location.href = 'login.html';                        
                return;                    
            }                    
            fn.success(data, textStatus, jqXHR);                
        }            
    });            
    var def = ajax.call($, _opt);                                                                                                                             
    // 兼容不支持異步回調的版本            
    if('done' in def){                
        var done = def.done;                
        def.done = function (func) {                    
            function _done(data) {                        
                if (data.code == '10') {//截獲請求數據  如果code=10 頁面跳轉到登錄界面                           
                    location.href = 'login.html';                            
                    return;                        
                }                        
                func(data);                    
            }                    
            done.call(def, _done);                    
            return def;                
        };            
    }            
    return def;        
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章