首页 > 解决方案 > 如果 ajax 调用抛出意外错误,$.active 将始终为 1

问题描述

我有一种方法可以阻止 UI 直到收到 ajax 响应。因此将 1 秒添加到计时器并阻止加载程序 until $.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();
    }
}

标签: javascriptjqueryajaxperformance

解决方案


我处理它的方式是使用ajaxStartajaxStop函数

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

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


推荐阅读