数组中的多个JSON提要

时间:2011-01-04 21:46:04

标签: javascript

我正在尝试拉出5个单独的JSON提要并让它循环,每个人都有一个嵌套的getJSON。

var feedList [feed1,feed2,feed3,feed4,feed5];

for (feed in feedList) {

  var index = 0;
   $.getJSON(feedList[feed], function(data) {
        $.each(data.items, function(i, obj) {
               $('li').append(obj.title + '=' + index + '<br>');
            });
        index++;
    }       

} 

出于某种原因,在firebug中它显示我通过for循环然后成功拉动feed然后完全绕过.getJSON循环内的任何东西。在拉出所有Feed之前,它不会返回到.getJSON循环。这会弄乱被拉物品的顺序,每次刷新页面时订单都是随机的。 (例如,首先列出feed2,然后列出feed4)

我也尝试过循环而不是for循环,但它仍然没有改变。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

使用递归函数

发送上一个请求成功的下一个请求
function getFeed(feed){
    $.getJSON(feed, function(data) {
        $.each(data.items, function(i, obj) {
               $('li').append(obj.title + '=' + index + '<br>');
            });
        if(feedList.length > index + 1)
            getFeed(feedList[++index]);
    }       
}
// start
getFeed(feedList[0]);

答案 1 :(得分:0)

尝试使用常规循环,结合自执行匿名函数。但是,您可能需要明确禁用ajax的异步性。

for ( var i = 0, l = feedList.length; i<l; ++i ) {
    (function() {
        // $.getJSON code
    })();
} 

实际上内部功能可能毫无用处。您可以使用

禁用异步
$.ajaxSetup( { "async": false } );

答案 2 :(得分:0)

顺序是随机的,因为$.getJSON是对文件的异步请求。简而言之,每个请求都需要一些时间来完成,并且只有在每个请求分别完成时,才会为每个请求调用您的函数(使用each调用)。

问题出现在您无法控制哪些请求将以哪种顺序返回。由于所有要求同时进行。


您可以在尝试下一个请求之前等待每个请求完成后按顺序获取Feed:

var feedList [feed1,feed2,feed3,feed4,feed5];
var index = 0;

function getFeed(index) {
    $.getJSON(feedList[index], function(data) {
        $.each(data.items, function(i, obj) {
            $('li').append(obj.title + '=' + index + '<br>');
        });
        if (index < feedList.length - 1)
            getFeed(++index);
    });
}

getFeed(0);