Jquery等待循环中带有ajax调用的函数完成-单击按钮后刷新
本文关键字:单击 按钮 刷新 函数 循环 等待 调用 ajax Jquery | 更新日期: 2023-09-27 18:29:51
我在jquery中的按钮点击事件中有一些代码。它获取aspx页面中的所有单选按钮,并根据它们的点击状态对它们进行循环,然后使用ajax调用(对c中的一个函数进行调用,该函数确实会将其再次传递给Web服务)逐一保存它们。
现在我想在保存事件之后调用页面刷新功能。但是,当我调用该事件时,页面在所有保存之前都会被刷新,只有少数单击的按钮处于新的选中状态,而其他按钮仍根据其旧状态加载。
那么,我该如何等待所有保存完成并调用刷新函数。。。我尝试了jquery when和trigger以及其他一些方法,但似乎都不起作用。。
$('#btnsubmit').click(function() {
$('.radioControl:radio:checked').each(function(e, i) {
.............
commentsAjax.doAjax(...); //function
});
refresh();
});
commentsAjax = {
doAjax: function(....) {
................
some function call in C# code which from then goes to a web service
success: function(e) {
//alert('Saved Successfully');
}
};
您将不得不使用递归的概念,或者基本上使用带有回调的循环。
(function recur(elements) {
var elem = Array.prototype.shift.call(elements);
if(elem) {
$.ajax({
url: "/path/to/check",
success: function() {
recur(elements); //Success, go again
}
});
} else {
//Done!
refresh();
}
})($(".radioControl:radio:checked"));
我们首先创建了recur
函数。您可能熟悉IIFE(立即调用函数表达式)模式,在该模式中,我们创建一个匿名函数并立即调用它((function(){})()
)。然而,在这种情况下,我们对其进行命名,从而允许我们在任何时候都可以在其作用域内调用所述函数。接下来,我们发送一个元素数组,随着循环的缓慢进行,我们将第一个项目从数组中移出,并将新的移位数组发送到下一次迭代中。这会耗尽数组,直到没有元素为止,即完成!
我们使用Array.prototype.shift.call
的原因是,jQuery对象不是本机数组,但具有所有必要的元素,允许我们在其上调用本机shift
函数(即length
和访问索引处对象的能力)。