我在使用jQuery each()方法时遇到了一些小问题:
jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
jQuery( this ).click();
});
location.reload(true);在这里,第一个指令得到一个html按钮列表,然后单击()每个按钮(从而启动一个ajax操作)。然后我要重新加载页面。但是在这里,在完成所有ajax click()请求之前重新加载页面。
在重新加载页面之前,等待所有单击ajax exchange的最佳方法是什么?
发布于 2018-04-29 10:02:00
您的代码工作如下:
在回调函数中设置的所有内容都将在进程仍在进行时执行。但是,下一句:
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")因此,一旦在回调中处理(单击)了最后一个元素,它就会重新加载页面。请注意,消息“重新加载前显示”将出现在页面刷新之前。
发布于 2018-04-29 10:18:55
您可以尝试在按钮上将所有ajax请求更改为同步,这样直到按钮单击上的ajax请求未完成为止,您的页面将不会重新加载。
发布于 2018-04-29 10:52:03
在这种情况下,
您可以使用服务器检查请求的数量,如果为0,则重新加载页面。
jQuery(":button[attributeFoo=\"bar\"]").each(function( index ) {
jQuery( this ).click();
});
while(jQuery.active != 0)
{
}
location.reload(true);https://stackoverflow.com/questions/50085230
复制相似问题