目前的項目中有這樣的需求,如果用戶的狀態因已登錄太久已經失效(登錄超時,用戶自己不知道),用戶在操作發起一個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;
};