为什么我的javascript / jquery没有顺序执行?
我有一个按钮绑定到一个单击处理程序 - 它会进行一个或多个AJAX调用,具体取决于数组中的项目数。我使用blockUI jquery插件在进行ajax调用时显示消息,然后显示结果,并通过调用$ .unblockUI();删除blockUI消息。
问题:出于某种原因,无论我希望ajaxCall函数执行多少次,在FIRST ajax调用完成后,即使循环仍然继续执行,消息也会被删除,并且结果会在#results div中正确显示。我希望在删除消息传递之前完成完整数量的循环迭代,但似乎它没有按顺序执行。这是有问题的代码:
$("#myButton").live("click", function(){
$.blockUI({ message: '<img src="new_loader.gif" /><h2>Getting Config Files</h2><small>Please be patient.</small>',
css: {
border: 'none',
padding: '15px',
backgroundColor: '#FFF',
'-webkit-border-radius': '10px',
'-moz-border-radius': '10px',
color: '#000'
}
});
for (var i=0; i< myArray.length; i++)
{
ajaxCall(myArray[i]);
}
$("#results").show('slow');
$.unblockUI();
return false;
});
是否有解释为什么循环执行后代码即使循环尚未完成?任何帮助它赞赏!谢谢。
没有找到相关结果
已邀请:
3 个回复
茬贺努充尽
是异步的,因此该方法在循环中被触发,但执行将花费更多的时间,因此在其余代码完成后结束。 本文中提供了一种处理此类行为的好方法:JavaScript中的异步方法队列链接
墩瓣茅械
做什么,如果它创建一个异常的
,这是正确的行为。 Ajax请求是默认的非阻塞,我想这就是你的代码在你的循环立即执行之后的原因。 我可以想到解决这个问题的一种可能方法是创建一个计数器变量,它在每次调用时从
增加,在每个
处理程序中减少(XHR readystate 4)。当该计数器变为零时,您应该在循环后执行代码。
视蕉梁拌客
是异步的吗?这将导致代码不在循环上阻塞,基本上快速完成循环然后继续进行。 您可以做的是提供一个带有计数器的回调函数,以检查所有ajax调用是否完成。