我有一个可以通过循环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
并且它有效 - 但是我已经读过它应该避免......
答案 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;
});
});