我正在进行多个AJAX调用,如下所示.如果所有调用都成功,下面的代码就可以正常工作.但是,假设urlid3和4由于某种原因而失败.是否有可能在Fail函数中获取all个失败的urlID?

var urlId = [1, 3, 4, 7]
let requests = [];
for (let i = 0; i < urlId.length; i++) {
    requests.push($.ajax(...));
}
$.when.apply($, requests).done(function () {
    $.each(arguments, function (idx, args) {
        //process args : urlId[idx]
    });
}).fail(function (jqXHR) {
    //how to get urlId's failed
});

推荐答案

您将不能可靠地获得.fail处理程序中所有失败的ID,因为它将在任何延迟被拒绝时立即触发,而不管其他延迟的状态如何.

如果您希望跟踪哪些请求成功,哪些请求失败,我认为最好的 Select 是 for each 将捕获失败的$.ajax调用附加一个catch处理程序,并将其映射到一个引用id和成功/失败状态的对象.以这种方式捕获错误将意味着所有延迟都将成功,因此成功和失败状态的处理将需要在连接到$.whendone处理程序中执行.例如:

var urlId = [1, 3, 4, 7]
let requests = [];

urlId.forEach(id => {
  requests.push(
    $.ajax(/*...*/)
      .then(response => {
        return {
          id,
          success: true,
          response
        };
      })
      .catch(error => {
        return {
          id,
          success: false,
          error
        }
      })
  );
});

$.when.apply($, requests)
  .done(function (values) {
    $.each(arguments, function (idx, obj) {
      console.log(`${obj.id}: success = ${obj.success}`);
    });
 });

Here是一个可以参考的小提琴.

Jquery相关问答推荐

如何用 jQuery / AJAX 替换表格的行

5 秒后关闭 jQuery 弹出模式

Jquery如何通过数组中的属性查找对象

如何在 bootstrap 模式关闭并重新打开时重置 bootstrap 模式?

jQuery 与 javascript?

Jquery Ajax,从 mvc.net 控制器返回成功/错误

我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?

使用 jQuery Validate 确认密码

在 contenteditable div 中的插入符号处插入 html

如何在 JQuery UI 自动完成中使用 source:function()... 和 AJAX

jQuery 序列化不注册复选框

确定 JavaScript 值是否为整数?

jquery变量语法

如何触发href元素的点击事件

如何使用 Javascript/jQuery 确定图像是否已加载?

循环判断复选框并计算每个选中或未选中的复选框

使用 JQuery 获取触发事件的元素的类

JavaScript:让代码每分钟运行一次

如何淡出显示:inline-block

fancybox2 / fancybox 导致页面跳转到顶部