//该代码主要实现旧系统已经挺庞大了,没办法去改变所有的页面的操作方式,
并且一定要做操作是登录失效执行又不能中断跳出循环,很难调整架构的情况
(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; };