web-dev-qa-db-ja.com

jQuery:続行する前に$ .getの読み込みが完了するのを待つことは可能ですか?

次のスクリプトは、ループを続行する前に$ .getがページの読み込みを完了するまで待機しません。

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

データはJSONオブジェクトです

どんなアイデアやコメントも大歓迎です。

24
simonwjackson
$.ajax({
     async: false,
     type: 'GET',
     url: 'http://localhost/play.php',
     success: function(data) {
          //callback
     }
});

それでうまくいくはずです。

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

59
jarcoal

ブラウザを潜在的にロックしたくない場合は、この方法で行うことができます。これにより、すべての処理が完了するまで曲を繰り返し処理し続けます。

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アイテムの何も変更に使用されていません何らかの形でリクエスト。

2
Doug Neiner