对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;        
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章