2010-11-17 62 views
0

我通過JSONP與JQuery循環,以獲得用戶名列表。然後,我想通過Twitter API發送每個用戶名以返回一系列內容(追隨者數量等)。然後一起顯示。這是基於政治候選人的更大的「儀表板」的一部分。因爲我寫的代碼很漂亮jquery json循環裏面的json循環混淆

我能夠導入並循環遍歷第一個JSONP,沒有問題。

當我在推特上的東西時,問題出現了:結果代碼實際上加載了所有用戶的信息,但一次全部完成,循環遍歷並替換每個ID直到它到達列表的底部。這讓我感到困惑,因爲它發生在原始的.each循環中。

下面的代碼的簡化版本:

var URL = "biglist.json" 

$.getJSON(yqlURL, function(data) { 

$.each(data.query.results.row, function() { 

var name = this.col0 
var twitter = this.col5 

var li = $('<li>').html('<li>'+name+'<li>Twitter ID: @'+twitter+'<span class="tweetdisplay"></span>'); 

var followers="http://api.twitter.com/1/users/show.json?screen_name="+twitter+"&callback=?" 

$.getJSON(followers, function(tweets) { 

$('.tweetdisplay').html('<li>twitter followers: ' +tweets.followers_count); 

}); 

$('#result ul').append(li); 

}); 
}); 

我敢肯定,我失去了一些東西真的很簡單,但我最肯定是錯過它。任何幫助將非常感激。

回答

1

我猜你遇到的問題是因爲內部$.getJSON()調用是異步的。它將立即啓動所有請求,無需等待響應。然後,每當它從服務器獲得答覆時,它都會調用您的function(tweets) {...代碼。無法保證服務器的響應將以您發送它們的相同順序返回,特別是因爲您的循環會幾乎同時觸發所有請求。

爲了使它以您想要的方式工作,您需要添加某種檢查來查看服務器是否對所有$.getJSON(followers ...請求做出了響應,然後將每個請求附加到<ul>列表中。如果您需要幫助,請留下評論。


更新(2010-11-18):原來我錯了您遇到的問題。我想你可能會讓你的課程與ID混淆。以下是您的代碼的修改版本:

$.each(data.query.results.row, function() { 
    var name = this.col0; 
    var twitter = this.col5; 

    var li = $('<li>').html('<ul><li>'+name+'</li>' 
       + '<li>Twitter ID: @' + twitter 
       + ' <span class="tweetdisplay"' 
       + 'id="' + twitter + '"></span></li></ul>' 
    ); 
    $('#result>ul').append(li); 

    var followers="http://api.twitter.com/1/users/show.json?screen_name="+twitter+"&callback=?" 
    $.getJSON(followers, function(tweets) { 
     $('#'+twitter).html('twitter followers: ' +tweets.followers_count); 
    }); 

}); 
+0

絕對的輝煌。我不知道我可以動態構建這樣的ID。非常感謝。像魅力一樣工作! – 2010-11-18 01:29:29