是否可以防止在对请求调用中止后触发AJAX请求的错误回调?

问题描述 投票:1回答:1

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

我希望做的是继续使用上面链接的解决方案,但是以防止执行错误回调的方式对其进行修改。我知道我可以在错误回调中检查状态和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个回答
0
投票

您可以在代码中的某个地方尝试使用此方法

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

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

response.then((resp)=> //your code to handle resp )
.catch ((error)=>{ //handle error here})
© www.soinside.com 2019 - 2024. All rights reserved.