我在使用jQuery each()方法时遇到的问题很少:
jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
jQuery( this ).click();
});
location.reload(true);
这里,第一条指令获取一个html按钮列表,并在每个指令上单击()(从而启动一个ajax动作)。 然后我想重新加载页面。但是这里的页面在所有ajax click()请求完成之前重新加载。
在重新加载页面之前,等待所有click ajax交换的最佳方法是什么?
答案 0 :(得分:2)
您的代码的工作原理如下:
您在回调函数中设置的所有内容都将在进程仍在进行时执行。但是,下一句话是:
location.reload(true);
(在“等待”结果的回调之外)在jquery语句之后立即执行,而不关心此语句是否结束。
一种可能适合您的解决方案:
var elements=jQuery(":button[attributeFoo=\"bar\"]");
var total=elements.length;
jQuery(elements).each(function( index, elem ) {
jQuery(elem).click();
if(index == total-1)
location.reload(true);
});
console.log("show before reload")
因此,一旦在回调中处理(点击)最后一个元素,它就会重新加载页面。请注意,在页面刷新之前会出现“重新加载前显示”消息。
答案 1 :(得分:0)
您可以尝试在点击按钮时将所有ajax请求更改为同步,直到按钮点击的ajax请求未完成,您的页面将无法重新加载。
答案 2 :(得分:0)
在那种情况下,
您可以检查服务器的请求数量,如果是0则重新加载页面。
jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
jQuery( this ).click();
});
while(jQuery.active != 0)
{
}
location.reload(true);