【问题标题】:$.active will be always 1 if ajax call throws unexpected error如果 ajax 调用抛出意外错误,$.active 将始终为 1
【发布时间】:2019-01-23 06:09:52
【问题描述】:

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

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

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();
    }
}

【问题讨论】:

    标签: javascript jquery ajax performance


    【解决方案1】:

    我处理它的方式是使用ajaxStart 和ajaxStop 函数

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

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

    【讨论】:

    • 那么为什么在任何应用程序框架中,通用加载器函数都需要超时?
    • 我不确定你的意思是什么框架,这个超时可能是为了阻止非常短的 ajax 请求导致加载器出现。我在我的应用程序中使用了上面的代码并且没有问题
    • 我在我的应用程序中尝试了上述方法。但是如果一个 ajax 调用另一个 ajax 并收到未处理的错误,例如 loadTime(); 加载器将永远不会停止。其中 loadTime() 不是方法。
    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2015-10-04
    相关资源
    最近更新 更多