jQuery ajax 和 "when"函数

标签 jquery ajax promise

我有一些(比方说 5)ajax 请求,我使用 jQuery.ajax 函数同时运行。

现在我想同步和聚合它们的结果,我使用 jQuery.when 函数来实现这一点。

我的问题是,一旦其中一个请求失败,$.when就会返回,并阻止其他请求返回,即使它们成功。

如何同步并获取所有 ajax 请求的所有结果(失败的和成功的)?

最佳答案

工作演示:http://jsbin.com/ocawoj/4/edit

function waitForAllPromisesToFinish () {
    var i,
        responses = [],
        deferred = $.Deferred(),
        helpers = {
            addToResponses: function (index, data) {
                responses[index] = data;

                var i = 0,
                    isAnyNull = false;

                for (i = 0; i < responses.length; i++) {
                    if (responses[i] === null) {
                        isAnyNull = true;
                        break;
                    } 
                }

                if (isAnyNull === false) {
                    deferred.resolve(responses);
                }
            },
            setupPromise: function (promise, index) {
                promise.always(function () {
                    var args = Array.prototype.slice.call(arguments);
                    helpers.addToResponses(index, args);
                });
            }
        },
        ajaxPromises = Array.prototype.slice.call(arguments);

    for (i = 0; i < ajaxPromises.length; i++) {
        responses[i] = null;
    }

    for (i = 0; i < ajaxPromises.length; i++) {
        helpers.setupPromise(ajaxPromises[i], i);
    }

    return deferred.promise();
}

该函数返回一个 promise 。您附加一个与您提供给 $.when() 的处理程序略有不同的完成处理程序。该函数跟踪每个 ajax Promise 的响应。每当它发现所有 ajax Promise 都已返回数据时,无论成功还是失败,它都会解析该 Promise。

可能有更有效的方法来实现相同的目的,尽管这是我首先想到的。

关于jQuery ajax 和 "when"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13541260/

相关文章:

jquery - 如果没有可用数据,rails3-jquery-autocomplete 清除字段

php - 使用 cronjob 更新和显示 MySQL 查询的结果

php - Javascript document.getElementById 连接

javascript - setTimeout 与 Promise 一起使用时的不明确行为

JQUERY 选择器不适用于具有相同名称的多个 id

javascript - 通过网络摄像头检测图像中的文本

javascript - 从 ajax 响应中获取变量值

javascript - 如何聚合二维数组 Promise?

javascript - 命名 Promise 变量等于回调参数

javascript - 我可以使用我的 jQuery AJAX post 方法数据键连接到我的 php 文件吗?