每个方法都有Jquery回调

时间:2018-04-29 09:39:58

标签: javascript jquery asynchronous click

我在使用jQuery each()方法时遇到的问题很少:

jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
  jQuery( this ).click();
});

location.reload(true);

这里,第一条指令获取一个html按钮列表,并在每个指令上单击()(从而启动一个ajax动作)。 然后我想重新加载页面。但是这里的页面在所有ajax click()请求完成之前重新加载。

在重新加载页面之前,等待所有click ajax交换的最佳方法是什么?

3 个答案:

答案 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);