0

我想等待所有回调函数完成,然后返回最终结果,如下所示:

                    var jsonArray = new Array();

                    for(var i = 0; i < 10; i++)
                    {
                        jQueryFunction(i, function(json){
                            jsonArray[i] = json;
                        });
                    }

                    return jsonArray;

jQueryFunction 是一个包含异步 ajax 和回调的函数,返回一个称为 json 的值。我想等待for循环完成,然后将所有返回值放入jsonArray,最后返回。

我的目标是等待所有 jQueryFunction 回调完成并将它们的返回存储到 jsonArray 中,然后在最后返回 jsonArray。我以前的目标不起作用,因为它立即返回 jsonArray 并且不等待 for 循环

我试过这样:

                function jQueryFunction(ptd_url, callback)
                { 
                    $.ajax
                            ({
                                type: "GET",
                                async: true,
                                url: ptd_url,
                                dataType: "jsonp",
                                jsonp: "callback",
                                jsonpCallback: "tpsHandler",
                                success: function(json)
                                {
                                    return callback(json);
                                }
                            });  
                }

                function finalResultFunction()
                {
                    var jsonArray = new Array();

                    for(var i = 0; i < 10; i++)
                    {
                        jQueryFunction(1, function(json){
                            jsonArray[i] = json;
                            alert(jsonArray[i]);
                        });
                    }

                    $.when.apply($, jsonArray).done(function(){
                      alert(jsonArray[0]);
                    ...
                 }

                 setInterval(finalResultFunction,1000);

第一个警报向我显示了正确的对象,但第二个警报仍然显示我为空。为什么?如何解决?

4

1 回答 1

2

您可以使用 jquerywhen来等待多个请求。您只需要jQueryFunction返回jqXHR.

function jQueryFunction(){
    return $.ajax( /* ... */ );
}

var requests = [];

for(var i = 0; i < 10; i++)
{
    var xhr = jQueryFunction( /* ... */ );

    requests.push(xhr);
}

$.when.apply($, requests).done(function(){

    // EVERYTHING IS NOW DONE, DO SOMETHING HERE

});
于 2013-10-04T17:43:22.953 回答