Цикл по нескольким запросам JSON (API данных YouTube) - PullRequest
2 голосов
/ 25 февраля 2010

Часть веб-сайта, над которым я работаю, - это страница с видео. Я извлекаю видео из аккаунта YouTube, используя API данных YouTube. Захват видео в произвольном порядке и без сортировки работает нормально, но когда я пытаюсь отсортировать их по категориям, у меня возникают проблемы. Допустим, есть три категории: фрукты, овощи, домашние животные. Вместо того, чтобы захватывать все видео сразу, я хочу захватить все видео с тегом Fruit и добавить их к <ul id="Fruit">. Затем запросите все видео с тегом «Овощ» и т. Д.

Когда я начинал, у меня было предупреждение браузера, когда он закончил получать запрос и затем добавлял соответствующий список. После того, как я снял предупреждение, оно все еще работало, но не так, как я ожидал. Либо петля продвигается слишком быстро, либо вообще не продвигается, но я не могу определить ошибку. В итоге все видео попадают в один список, <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>');
         }
       });
 }

1 Ответ

3 голосов
/ 25 февраля 2010

Проблема в том, что вы используете переменную 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>');
         }
       });
 }

Я не проверял это, поэтому я не уверен, что это работает ..

...