0

ループされた ajax 呼び出しを介して更新できるフォト ギャラリーがあります。問題は、「完了」が発生してページが変更される前に、約6枚の画像しか更新されないことです。「完了」を実行する前に、ループ全体が終了するまでスクリプトを待機させるにはどうすればよいですか?

$('#selectAlbum').change(function() {
  var thisAlbID = $(this).children(":selected").attr("id");
  var thisAlbURL = $(this).val();
  $('.medSelectHighlight').each(function() {
     jQuery.ajax({
       url:'system/move-media.php',
       data:{photo_id:$(this).attr('id'),album_id:thisAlbID},
       dataType: 'json',
       type:'POST'
    }).done(function() {
       document.location.href='../media/'+thisAlbURL;
    });
}); 

});

また、試してみてうまくいったことも付け加えておくasync false必要があります-しかし、それは避けるべきだと読みました...

4

2 に答える 2

0

DPP の助けを借りて、私は最終的に使用するajaxStopことになりましたが、それは魔法のように機能しました。同じ問題を抱えている人のためのコードは以下のとおりです...

$('#selectAlbum').change(function() {
  $('body').css('cursor', 'progress');
  var thisAlbID = $(this).children(":selected").attr("id");
  var thisAlbURL = $(this).val();
     $('.medSelectHighlight').each(function() {
        jQuery.ajax({
        url:'system/move-media.php',
        data:{photo_id:$(this).attr('id'),album_id:thisAlbID},
        dataType: 'json',
        type:'POST'
        });
     }).ajaxStop(function() {
     document.location.href='media/'+thisAlbURL;
     });

});
于 2012-09-28T17:40:27.287 に答える
0

doneajax が起動されるたびに実行していることに気付きました。done正しく配置されていますか?つまり、each代わりに の閉じ括弧の最後にあるはずですよね? これを試して:

$('.medSelectHighlight').each(function() 
  {
        jQuery.ajax
        ({
            url:'system/move-media.php',
            data:{photo_id:$(this).attr('id'),album_id:thisAlbID},
            dataType: 'json',
            type:'POST'
         });
   }).done(function() 
         {
               document.location.href='../media/'+thisAlbURL;
         });
于 2012-09-28T07:54:08.357 に答える