首页 > 解决方案 > 是否可以防止在请求上调用 abort 后触发 AJAX 请求的错误回调?

问题描述

我的第一个问题是,如果用户在发出请求时离开页面,我正在寻找一种自动中止 AJAX 请求的方法。我发现这个有用的解决方案解决了这个问题。现在我的问题是,在我的应用程序中中止特定的 AJAX 请求后,用户会被定向到一个错误页面(我相信这是某些错误回调中的预期行为),我不希望这是这种情况下的行为当用户在请求期间只是导航到不同的页面时。

我希望做的是继续使用上面链接的解决方案,但以防止执行错误回调的方式对其进行修改。我知道我可以在错误回调中检查 status 和 readystate 属性,但这意味着我必须在我的应用程序中的所有 AJAX 请求中包含这些检查,而且这不是很容易维护。我的目标是将这个逻辑全部放在一个地方,或者至少在尽可能少的地方。

我试过以下没有运气。似乎首先执行本地错误回调,然后执行到全局处理程序,到那时为时已晚。

任何帮助是极大的赞赏。谢谢

function onPageLoaded() {
    var jqxhrs = [];

    $(window).bind("beforeunload", function (event) {
        $.each(jqxhrs, function (idx, jqxhr) {
            if (jqxhr) {
                jqxhr.abort();
            }
        });
    });

    $(document).ajaxError(function (e, jqXHR, ajaxSettings, thrownError) {
        if (jqXHR.status === 0 || jqXHR.readyState === 0) {
            return;
        }
    });

    function registerJqxhr(event, jqxhr, settings) {
        jqxhrs.push(jqxhr);
    }

    function unregisterJqxhr(event, jqxhr, settings) {
        var idx = $.inArray(jqxhr, jqxhrs);
        jqxhrs.splice(idx, 1);
    }

    $(document).ajaxSend(registerJqxhr);
    $(document).ajaxComplete(unregisterJqxhr);
}

标签: javascriptjqueryajaxasp.net-ajax

解决方案


您可以在代码中的某处尝试此操作

   var response=Promise.all([ajaxcall1,ajaxcall2,ajaxcall3,....])

如果其中一个承诺没有得到解决,那么您可以处理错误

response.then((resp)=> //your code to handle resp )
.catch ((error)=>{ //handle error here})

推荐阅读