【问题标题】:jquery deferred.done : passing a data array to done methodjquery deferred.done :将数据数组传递给 done 方法
【发布时间】:2015-05-23 11:31:11
【问题描述】:

我正在使用https://api.jquery.com/jquery.when/ 中描述的方法进行一系列 ajax 调用。 (基于该页面中的示例$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ))。

以下代码有效。但是,我无法弄清楚如何将数据数组传递给 .done() 方法。在下面的示例中,我有 data1、data2、data3。但是在实际情况下,它可能是 data1、data2、...、dataN,其中“N”可以是任意数字。你能帮我吗?我想将“i”值映射到相应的数据值。

function test() {
    var myArr = [];
    var i;
    for (i = 1; i <= 3; i++) {
        myArr.push(
            jQuery.ajax({
            type: "GET",
            url: "http:/c.html/" + i,
            });
        );
    }

    $.when.apply($, myArr).done(function(data1, data2, data3) {
     //do something on data1, data2, data3
    }).fail (function (jqXHR, textStatus) {
        //oops..failed
    });   
}

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    您可以使用arguments objects,它是一个类似数组的对象,包含传递给函数的所有参数

    function test() {
        var myArr = [];
        var i;
        for (i = 1; i <= 3; i++) {
            myArr.push(jQuery.ajax({
                type: "GET",
                url: "http:/c.html/" + i,
            }));
        }
    
        $.when.apply($, myArr).done(function () {
            $.each(arguments, function (idx, args) {
                console.log(args[0])
            })
        }).fail(function (jqXHR, textStatus) {
            //oops..failed
        });
    }
    

    演示:Fiddle

    【讨论】:

    • Arun, arguments 对象的顺序是否与 myArr 的顺序相同(当方法对象时)。或者是调用完成的顺序?
    • 它将与数组的顺序相同
    • Arun,如果 'myArr' 长度为 2 或更多,则您建议的解决方案有效。但是,如果 myArr 中只有一个元素( for (i = 1; i
    • 是的……有这样的问题……试试jsfiddle.net/arunpjohny/tecvmxot/2
    • 谢谢!!这与我正在考虑的解决方案相同..我认为可能有其他方法可以避免“ if (myArr.length > 1) { } else {} ”阻塞..再次感谢..
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多