//该代码主要实现旧系统已经挺庞大了,没办法去改变全部的页面的操做方式,而且必定要作操做是登陆失效执行又不能中断跳出循环,很难调整架构的状况(function ($) {
//首先备份下jquery的ajax方法
var $oajax = $.ajax;
//重写jquery ajax保留旧方法,用于执行判断是否登陆
$.oajax = function (opt) {
$oajax(opt);
};
//重写jquery的ajax方法
$.ajax = function (opt) {
console.log("执行了重写Ajax");
//ajax回调方法
var ajax = function() {
//备份opt重载方法
var fn = {
error: function(XMLHttpRequest, textStatus, errorThrown) {},
success: function(data, textStatus) {},
beforeSend: function(XHR) {},
complete: function(XHR, TS) {}
}
if (opt.error) {
fn.error = opt.error;
}
if (opt.success) {
fn.success = opt.success;
}
if (opt.beforeSend) {
fn.beforeSend = opt.beforeSend;
}
if (opt.complete) {
fn.complete = opt.complete;
}
if (opt.nobeforeSend == undefined) {
opt.nobeforeSend = true;
}
//扩展加强处理
var oopt = $.extend(opt,
{
error: function(XMLHttpRequest, textStatus, errorThrown) {
//console.log("出现错误了");
//默认处理方法
fn.error(XMLHttpRequest, textStatus, errorThrown);
},
success: function(data, textStatus) {
//console.log("执行成功了");
fn.success(data, textStatus);
},
beforeSend: function(XHR) {
//console.log("ajax以前就执行了");
fn.beforeSend(XHR);
},
complete: function(XHR, TS) {
//console.log("执行完成");
//默认处理方法
fn.complete(XHR, TS);
}
});
return $oajax(oopt);
};
//指意 用于不须要检测是否须要登陆
if (!opt.nobeforeSend) {
//检查系统登陆状况
var islogin = CheckIsLogin();
if (islogin == true) {
return ajax();
}
//调用弹窗
top.OpenDialog();
//定时检测是否已经执行登陆,等待执行
var it = setInterval(function() {
if (top.IsContinueLoad == true) {
clearInterval(it);
return ajax();
}
},
100);
} else {
return ajax();
}
};
})(jQuery);
function CheckIsLogin() {
var islogin = false;
//用旧ajax执行,避免死循环
$.oajax({
url: "/Login/IsLogin",
type: "get",
async: false,
dataType: "json",
success: function (data) {
islogin = data;
top.IsContinueLoad = islogin;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.error("检查登陆出现异常,状态:" + textStatus);
console.log(XMLHttpRequest);
console.log(errorThrown);
//top.IsContinueLoad = false;
}
});
return islogin;
};