jQuery: возможно ли дождаться завершения загрузки $ .get, прежде чем продолжить? - PullRequest
22 голосов
/ 19 ноября 2009

Следующий скрипт не ждет, пока $ .get завершит загрузку страницы, прежде чем продолжить цикл:

$.each(data.songs, function(index, val) {
    $('#nowartist')
         .append('song starting');
    $.get("http://localhost/play.php", function(data){
         alert('done');
    });
});

данные являются объектом JSON

Любые идеи или комментарии будут с благодарностью.

Ответы [ 2 ]

56 голосов
/ 19 ноября 2009
$.ajax({
     async: false,
     type: 'GET',
     url: 'http://localhost/play.php',
     success: function(data) {
          //callback
     }
});

Это должно сделать это.

http://docs.jquery.com/Ajax/jQuery.ajax#options

2 голосов
/ 19 ноября 2009

Если вы не хотите потенциально блокировать браузер, вы можете сделать это таким образом, что вы продолжаете загружать песни, пока все они не будут обработаны.

function play_next(){
   var song = data.songs.shift(); // Removes the first song and stores it in song

   $('#nowartist').append('song starting');

   $.get("http://localhost/play.php", function(ret_data){
      alert('done');
      if(data.songs.length) play_next(); // Call next song if more songs exist;
   });
}
play_next(); // Start it off

Обратите внимание, что он изменяет массив data.songs, удаляя элементы при обработке. Если это проблема, перед запуском продублируйте массив, чтобы он удалил элементы из массива дубликатов.

Кстати, я предполагаю, что вы не вставили весь свой код ... сейчас он загружает одну и ту же страницу для каждой песни, но ничего из элемента song не используется для изменения запрос любым способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...