如何在延迟对象数组中打印值?

时间:2014-07-28 13:46:14

标签: javascript jquery ajax jquery-deferred

我有以下要求:

var req1 = $.ajax({
                type: "GET",
                url: url,
                dataType : "xml"
            });

            req1.done(function (resp1) {
                $(resp1).find('interest').each(function() {

                    var interest_id = $(this).find('id').text();
                    var interest_name = $(this).find('name').text();

                    var request = $.ajax({
                        type:"GET",
                        url: "http://en.wikipedia.org/w/api.php?action=parse&format=json&page="+ interest_name + "&redirects&prop=text",
                        dataType: "jsonp"
                    });

                    requestsArray.push(request);

                 });

                $.when.apply(null, requestsArray).done(function () {
                    console.log("entrou");

                });

            });

但是当我进入

$.when.apply(null, requestsArray).done(function () {
                        console.log("entrou");

                    });

我不知道如何在requestsArray中找到个人回复。我怎样才能做到这一点?我已经尝试过但似乎没有任何效果。

1 个答案:

答案 0 :(得分:2)

您可以使用arguments对象访问传递给函数的未知数量的值:

$.when.apply($, requestsArray).done(function(){
  console.log(arguments); //plain arguments object
  console.log([].slice.call(arguments)); //arguments turned into real array
});

请参阅MDN docs on the arguments object

由于您正在将$.ajax推送到数组中,您可能会考虑删除它们将传递的其他参数:

var request = $.ajax({
    type:"GET",
    url: "http://en.wikipedia.org/w/api.php?action=parse&format=json&page="+ interest_name + "&redirects&prop=text",
    dataType: "jsonp"
}).then(function(data, textStatus, jqXHR){
    return data; //this will make sure textStatus and jqXHR aren't passed any further
});