2010-02-25 34 views
2

我正在處理的網站的一部分是視頻頁面。我正在通過訪問YouTube數據API從YouTube帳戶提取視頻。以特定順序抓取視頻並不排序工作正常,但當我嘗試將它們分類時,我開始遇到麻煩。假設有三個類別,水果,蔬菜,寵物。我不想一次抓取所有視頻,而想抓取所有帶有Fruit標記的視頻,將它們附加到<ul id="Fruit">。然後請求所有帶有Vegetable等標記的視頻。循環播放多個JSON請求(YouTube數據API)

開始時,瀏覽器在獲取請求完成後發出警報,然後附加相應的列表。在我發出警報後,它仍然有效,但不是我所期望的。無論循環是前進得太快還是根本沒有前進,但我似乎無法發現錯誤。最終發生的是所有視頻都被放入一個列表中,<ul id="Vegetable">

請注意:我使用一個名爲jGFeed的插件,它包裝了jQuery getJSON函數,所以我相信你可以這樣對待它。

var videoCategories = ['Fruit', 'Vegetable', 'Pets']; 

for (var i = 0; i < videoCategories.length; i++) { 
    var thisCategory = videoCategories[i]; 
    $.jGFeed('http://gdata.youtube.com/feeds/api/users/username/uploads?category='+thisCategory, 
    //Do something with the returned data 
    function(feeds) { 
     // Check for errors 
     if(!feeds) { 
     return false; 
     } else { 
     for(var j=0; j < feeds.entries.length(); j++) { 
      var entry = feeds.entries[i]; 
      var videoUrl = entry.link; 
      $('ul#'+thisCategory).append('<li><a href="#" id="'+videoUrl+'">'+entry.title+'</a></li>'); 
     } 
     }); 
} 
+0

我不知道這是問題,但功能的末端支架似乎缺失。 – 2010-02-25 16:32:47

+0

另外,不應該是feeds.entry [j]而不是條目[i]? – 2010-02-25 16:37:25

+0

嘿,是的,這兩點都對。從原始來源轉換出錯。我實際上已經開始工作,並且稍後會發布解決方案。但是,謝謝你的評論! – saibot 2010-02-25 19:26:52

回答

3

問題是,您正在使用「thisCategory」變量來設置類別名稱。問題在於,如果此變量發生更改,則需要等待服務器響應。

你可以嘗試把整個腳本函數內部:

var videoCategories = ['Fruit', 'Vegetable', 'Pets']; 

for (var i = 0; i < videoCategories.length; i++) { 
    getCategory(videoCategories[i]); 
} 

function getCategory(thisCategory) 
{ 

    $.jGFeed('http://gdata.youtube.com/feeds/api/users/username/uploads?category='+thisCategory, 
    //Do something with the returned data 
    function(feeds) { 
     // Check for errors 
     if(!feeds) { 
     return false; 
     } else { 
     for(var j=0; j < feeds.entries.length(); j++) { 
      var entry = feeds.entries[i]; 
      var videoUrl = entry.link; 
      $('ul#'+thisCategory).append('<li><a href="#" id="'+videoUrl+'">'+entry.title+'</a></li>'); 
     } 
     }); 
} 

我沒有測試過這一點,所以我不知道它是否工作..