You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多个AJAX调用的fail函数中获取所有失败的urlId?

如何在多AJAX调用失败时获取所有失败的urlId

你当前的代码在所有AJAX调用成功时能正常运行,但$.when()的fail回调只会在第一个失败的请求触发时立即执行,无法获取后续失败的请求对应的urlId。要收集所有失败的urlId,可以通过以下两种方式实现:

方法一:单独绑定每个请求的失败回调,收集失败ID

给每个AJAX请求单独绑定fail回调,将对应的urlId存入数组,最后在所有请求完成后统一处理:

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

for (let i = 0; i < urlId.length; i++) {
    const id = urlId[i];
    const request = $.ajax(...) // 替换为你的AJAX配置
        .fail(() => {
            failedIds.push(id);
        });
    requests.push(request);
}

// 等待所有请求完成(无论成功失败)
$.when.apply($, requests).always(function() {
    if (failedIds.length > 0) {
        console.log("失败的urlId:", failedIds);
        // 在这里处理失败的ID逻辑
    } else {
        // 所有请求成功时的处理逻辑
        $.each(arguments, function(idx, args) {
            // process args : urlId[idx]
        });
    }
});

方法二:用Promise.allSettled统一处理结果

如果你的运行环境支持ES6 Promise,可以利用Promise.allSettled()(jQuery的AJAX返回对象兼容Promise标准),将每个请求的结果与对应的urlId绑定,最后过滤出失败的条目:

var urlId = [1, 3, 4, 7];
let requests = urlId.map(id => {
    return $.ajax(...) // 替换为你的AJAX配置
        .then(response => ({ id, status: 'fulfilled', value: response }))
        .catch(error => ({ id, status: 'rejected', reason: error }));
});

Promise.allSettled(requests)
    .then(results => {
        // 提取所有失败的urlId
        const failedIds = results
            .filter(item => item.status === 'rejected')
            .map(item => item.id);
        
        if (failedIds.length > 0) {
            console.log("失败的urlId:", failedIds);
            // 处理失败逻辑
        } else {
            // 所有请求成功时的处理
            results.forEach((result, idx) => {
                // process result.value : urlId[idx]
            });
        }
    });

关键说明

原来的$.when().fail()逻辑存在局限性:只要有一个请求失败,fail就会立即触发,不会等待其他请求完成,因此无法获取后续失败的urlId。上面两种方法都是等待所有请求完成后再统计失败的ID,解决了这个问题。

内容的提问来源于stack exchange,提问作者Suresh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:28:19