目前的项目中有这样的需求,如果用户的状态因已登录太久已经失效(登录超时,用户自己不知道),用户在操作发起一个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;
};