3

私が取り組んでいる Web サイトの一部は、ビデオ ページです。YouTube Data API にアクセスして、YouTube アカウントから動画を取得しています。ビデオを特定の順序や並べ替えなしで取得することは問題なく機能しますが、それらをカテゴリに分類しようとすると、問題が発生し始めます。果物、野菜、ペットの 3 つのカテゴリがあるとします。すべてのビデオを一度に取得する代わりに、Fruit でタグ付けされたすべてのビデオを取得し、<ul id="Fruit">. 次に、野菜などのタグが付けられたすべての動画をリクエストします。

開始時に、リクエストの取得が完了して適切なリストが追加されたときに、ブラウザにアラートが表示されました。アラートを解除した後も機能しましたが、期待どおりではありませんでした。ループの進行が速すぎるか、まったく進行していませんが、間違いを見つけられないようです。最終的には、すべてのビデオが 1 つのリストにまとめられ<ul id="Vegetable">ます。

注: jQuery の getJSON 関数をラップする jGFeed というプラグインを使用しているので、そのように扱えると思います。

 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>');
         }
       });
 }
4

1 に答える 1

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>');
         }
       });
 }

私はこれをテストしていないので、うまくいくかどうかはわかりません..

于 2010-02-25T16:37:58.767 に答える