jq ajax 重写 登陆过时等待执行

//该代码主要实现旧系统已经挺庞大了,没办法去改变全部的页面的操做方式,而且必定要作操做是登陆失效执行又不能中断跳出循环,很难调整架构的状况(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;
};
相关文章
相关标签/搜索