我有一个包含许多html表单的页面,我需要遍历所有这些表单,提交它们并等待响应,然后获取数据。
自然要做的就是写一个这样的循环:
for (i = 0; i < win.document.forms.length; i++)
{
// Submit form i and wait for the response
}
然后问题就出现了:你如何在循环中等待响应?您可以检查数据是否可用,如果没有?你怎么在循环中消磨时间? js中没有睡眠功能,对吧?
要在循环中运行并且始终检查数据会占用所有系统资源。你也做不到。我目前的智慧是你需要退出循环并终止,但安排包含函数以便稍后执行。当函数稍后运行时,您必须在停止的位置重新进入循环,并再次检查可用数据。
至少可以说是尴尬。我错过了什么吗?有更好的解决方案吗?
答案 0 :(得分:0)
您可以使用带回调的ajax异步调用,这样就不会阻塞线程。
$("form").each(function (index, element) {
var form = $(element);
$.ajax({
url: form.attr('action'),
type: 'POST',
data: form.serialize(),
success: function (result) {
// ... Process the result ...
}
});
});
如果你想使用for循环,那么你还需要创建外部函数,因为在该循环中定义的变量不会有词法范围,所以你最终可能会多次提交相同的表单。