2013-05-22 1 views
1

Я впервые получил плейлист JSON с видео. Затем я получаю JSON информацию о каждом идентификаторе видео, который был указан в списке воспроизведения. Из каждой видеоинформации JSON я хочу перечислить эскиз видеоролика в div «#container».Почему заказ продолжает меняться при добавлении повторяющихся результатов из json-итерации?

Моя проблема заключается в том, что порядок эскизов меняется каждый раз, когда я нажимаю кнопку «Получить данные JSON». Я посмотрел в консоль, и индивидуальное видео JSON всегда запрашивается в том же порядке, это просто, когда я отправляю информацию из этого JSON, это не в порядке.

Что дает?

$(document).ready(function(){ 
    $("button").click(function(){ 
    //$('p').remove(); 
     $.getJSON("https://api.dailymotion.com/playlist/xy4h8/videos",function(result){ 

      $.each(result.list, function (index, value) { 
      // console.log(value.id); 
       $.getJSON("https://api.dailymotion.com/video/"+value.id+"?fields=id,title,thumbnail_medium_url",function(resulted){ 
        $("#container").append(resulted.thumbnail_medium_url + "<br />"); // THIS IS THE BIT ALWAYS OUT OF ORDER 
       }); // use id of each object in list to get next json 
      }); // for each of the list object within the playlist result obj 

     }); // get playlist json 
    }); // button click 
}); 

Спасибо за любую помощь.

+0

'$ .getJSON' является асинхронным. Для каждого элемента в 'result.list' вы отправляете запрос AJAX с обратным вызовом, который запускается всякий раз, когда заканчивается запрос, который вообще не имеет гарантированного порядка. – Blender

ответ

0

Потому что внутри каждого цикла вы делаете вызов ajax. Так что все запросы идут почти одновременно. И в зависимости от времени отклика, получаемого каждым значением вызова ajax, добавляются в контейнер. Итак, чей ответ наступит первым, он будет добавлен первым. То почему порядок различен все время.

Очередь всех ваших запросов ajax, если вы хотите, чтобы каждый раз один и тот же заказ. Это может помочь вам сохранить весь запрос ajax в очереди. Смотрите третий пример «очереди что-то вроде Ajax звонки» http://learn.jquery.com/effects/uses-of-queue-and-dequeue/

0

$.getJSON() функция just a shortcut для $.ajax() функции с типом данных, установленным в json. Если вы посмотрите на the documentation для функции jQuery.ajax(), вы увидите, что по умолчанию установлено асинхронное, что означает, что это может произойти в любое время и может не быть в указанном порядке. Вы можете устранить проблему, выполнив прямой jQuery.ajax() с async: false и dataType: 'json'.

Смежные вопросы