多个json请求的一个回调

时间:2009-06-06 13:33:14

标签: jquery ajax json

我想在jQuery中生成X个ajax请求,并将json响应添加到数组中。 当所有的ajax请求完成后,我想执行一些代码。有没有好办法解决这个问题?

4 个答案:

答案 0 :(得分:2)

除了计算请求并在代码中手动计算它们之外,我不知道任何其他方法。一旦他们全部退回并计算,请执行主回调。

答案 1 :(得分:1)

这段代码应该做你想要的所有jQuery样式。基本上它使用一点递归来完成它。将选项传递给loadmultiples函数以设置您要执行的操作,并将JSON响应推送到数组。如果您想将JSON响应合并到一个结构中,您可以轻松地更改它,但我不确定这是否是您想要的。

var loadmultiples = function(options) {    

    var settings = $.extend({

        //set the url to get
        url : '/response.json',

        //this function is called when everything is done
        callback : function() {},

        //set this option to define how many loads to do
        numbertodo : 10,

        //these two are just used for
        //storing data while we recurse,
        //and keeping track of the current position
        //however you can change them if you want to start
        //from a different point, or have existing data
        numberdone : 0,
        data : []
    }, options || {});

    //load the json, passing up the current 'number'
    //of the content to load
    $.ajax({
        url : settings.url,
        data : { 'number' : settings.numberdone },
        dataType: 'json',        
        success: function(result) {            

            //add the response to the data
            settings.data.push(result);

            //increment the counter of how many files have been done
            settings.numberdone++;

            //
            if(settings.numberdone < settings.numbertoexecute) {
                loadmultiples(settings);
            } else {
                settings.callback(settings.data);
            }

        }        
    });

}

//so now we can call it...
loadmultiples({
    callback: function(data) {
        //this function will get called when all the data calls have been
        //completed, and the resulting data is in the data parameter

    }
});

答案 2 :(得分:0)

对于每个ajax响应,我会这样做:

for(var k in json)
  someArray[k]=json[k];

但我不确定你的json数据看起来如何。

答案 3 :(得分:0)

我最近通过解雇一堆ajax请求,然后在他们进来时递减计数器来做到这一点。

它工作正常,但我最终将我的代码从一堆小的ajax请求更改为只是一次向服务器询问所有内容。请求少得多,开销也少,而且更强大。

除非您有充分的理由提出个别请求(某些请求可能很快,有些请求很慢,并且您可以提供一些有意义的信息显示),我会把它们全部混在一起(假设您可以修改服务器代码或添加新的服务器代码。)