从循环外部打破循环
问题描述:
我有一个默认值的搜索表单。 当用户使用页面时,onload会调用一个函数。从循环外部打破循环
该函数有一个循环,每次迭代都会调用一个Ajax请求。
我花了大约20到30秒将执行所有的Ajax请求。
在这些迭代期间,用户可以更改表单值,并且可以在这些迭代完成之前提交表单 。
当用户点击提交按钮时,有没有办法打破这个循环?
谢谢。
答
在调用每个ajax请求之前,它会检查一个标志。举例来说,它可能在页面加载时被初始化为CARRY_ON = true;
现在,当按下提交按钮时,将该标志更改为false。然后所有未来的ajax请求将被停止。
答
如果表单被回发,页面将被卸载。任何挂起的请求都将被删除(尽管服务器将继续处理它已经看到的任何请求,但无法提供帮助)。如果这个帖子也是通过AJAX发生的,那么你可以使用一个保护变量,并且在你提交之前简单地设置它,并在你发送更新请求之前检查它。
我假设你想定期更新,直到表单被提交 - 循环并不是真正理想的处理方式。下面的例子使用setTimeout来每秒钟轮询服务器 - 只要表单尚未提交。
var submitted = false;
var timer = null;
$('.submit-button').click(function() {
submitted = true;
if (timer) clearTimeout(timer);
$('form').submit();
return false;
});
function doUpdate()
{
if (!submitted) {
$.ajax({
...
});
timer = setTimeout(doUpdate,1000);
}
}
doUpdate();
答
当您提交表单时,自动终止其他客户端执行。
如果您使用Ajax提交,那么您可以保留一个标志(全局变量)来停止循环。
20到30秒?对于AJAX调用似乎相当长... – scunliffe 2010-08-10 13:26:23
如果AJAX请求异步完成(因为他们可能会这样做,因此_A_JAX),请求会相互之间很快被触发。它们可能需要大约30秒才能完成,但请求已经发送完毕。 – 2010-08-10 13:27:20