【问题标题】:Is it possible to prevent triggering the error callback of an AJAX request after calling abort on the request?是否可以防止在请求调用 abort 后触发 AJAX 请求的错误回调?
【发布时间】:2020-06-02 19:15:46
【问题描述】:

我的第一个问题是,如果用户在发出请求时离开页面,我正在寻找一种自动中止 AJAX 请求的方法。我发现 this 有用的解决方案解决了这个问题。现在我的问题是,在我的应用程序中中止特定的 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);
}

【问题讨论】:

    标签: javascript jquery ajax asp.net-ajax


    【解决方案1】:

    你可以在代码中的某个地方试试这个

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2021-01-26
      • 2015-02-25
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多