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;
};
相關文章
相關標籤/搜索