gpt4 book ai didi

javascript - 一旦所有请求都完成,我们如何确定哪个ajax因多个ajax请求而失败?

转载 作者:行者123 更新时间:2023-11-30 14:43:39 25 4
gpt4 key购买 nike

我有两个 ajax 调用,即

var ajax1 = $.ajax({ url: Url1 });

var ajax2 = $.ajax({ url: Url2 });

$.when(ajax1, ajax2).then(function (response1, response2) {

});

我们希望有条件地处理这些 API 延迟请求的失败情况:

  1. 如果 ajax1 成功且 ajax2 成功:调用 WinAjax1_WinAjax2();
  2. 如果 ajax1 成功而 ajax2 失败:调用 WinAjax1_LoseAjax2();
  3. 如果 ajax1 失败而 ajax2 成功:调用 LoseAjax1_WinAjax2();
  4. 如果 ajax1 失败且 ajax2 失败:调用 LoseAjax1_LoseAjax2();

如果我将逻辑放在相应ajax 的.fail 中,我不知道其他ajax 的响应是什么。如果我将 .fail 放在 .when 的失败中,我将无法识别它是哪个失败。

一旦所有请求都完成,有人可以帮助我如何确定哪个 ajax 因多个 ajax 请求而失败?

最佳答案

jQuery 延迟对象有一个 state method .因此,您可以使用 $.when 并在失败的情况下检查每个延迟对象的状态。

var d1 = jQuery.Deferred();
var d2 = jQuery.Deferred();


$.when(d1, d2).then(function(v1, v2) {
// do something on succes
}).fail(function() {
console.log(d1.state()); // resolved
console.log(d2.state()); // rejected
});

d1.resolve( "Fish" );
d2.reject( "Pizza fail" );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

编辑:看来我错过了您的主要目标。如果您需要等到所有请求都完成(解决或拒绝)。然后 $.when 将无济于事,因为一旦任何请求被拒绝而不是等待其他请求,它就会被拒绝。

在这种情况下,我建议在您完成所有请求时进行计数。然后检查他们的状态。

var d1 = jQuery.Deferred();
var d2 = jQuery.Deferred();
var activeRequests = 2;

function onComplete() {
activeRequests--;

if (!activeRequests) {
// check deferred object states here
console.log(d1.state());
console.log(d2.state());
}
}

d1.always(onComplete);
d2.always(onComplete);

d2.reject( "Pizza fail" );
d1.resolve( "Fish" );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

关于javascript - 一旦所有请求都完成,我们如何确定哪个ajax因多个ajax请求而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49296389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com