'完成'之前jQuery AJAX循环没有完成

时间:2012-09-28 07:44:08

标签: javascript jquery ajax

我有一个可以通过循环ajax调用更新的照片库。问题是,它只会在“完成”被触发并且页面发生变化之前更新大约6个图像。如何使脚本等到整个循环完成后再执行'done'?

$('#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并且它有效 - 但是我已经读过它应该避免......

2 个答案:

答案 0 :(得分:0)

我注意到每次激活ajax时你都会done执行。您的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;
         });

答案 1 :(得分:0)

在民进党的帮助下,我最终使用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;
     });

});