如果ajax调用引发意外错误,$。active将始终为1

时间:2019-01-23 06:09:52

标签: javascript jquery ajax performance

我有一种方法可以阻塞UI,直到接收到ajax响应为止。因此,将计时器增加1秒钟并阻止加载程序,直到$.active == true,这意味着没有待处理的ajax请求。

但是,这里的问题是,如果抛出任何jquery错误/ ajax错误并且未对其进行处理,则$.active将始终为1。该应用程序被图像阻止,并且永远不会变为真。知道这个问题有什么替代方案或解决方案吗?

function startLoader(timeout, delay) {
    loader = setTimeout(function() {
        $.blockUI({
          message: '<img "a.png" alt="Loader"/>',
        });
    }, delay /*loader delay*/ );
    checkPendingRequest();
}

function checkPendingRequest() {
    if ($.active > 0) {
        window.setTimeout(checkPendingRequest, 1000);
    } else {
        stopLoaderAjax();
    }
}

1 个答案:

答案 0 :(得分:0)

我要使用的方法是使用ajaxStartajaxStop函数

$(document).ajaxStart(function(){
    $.blockUI({
        message: '<img "a.png" alt="Loader"/>',
    });
}).ajaxStop(function(){
    $.unblockUI();
});

这些将在所有ajax调用的开始和结束时自动触发,并包含错误。