我有一个包含默认值的搜索表单。 当用户浏览页面时,我会调用一个函数。
这个函数有一个循环,每次迭代都会调用一个Ajax请求。
我需要大约20到30秒才会执行所有Ajax请求。
在这些迭代期间,用户可以更改表单值并可以提交表单 在这些迭代完成之前。
当用户点击提交按钮时,有没有办法打破这个循环?
感谢。
答案 0 :(得分:3)
如果要回发表单,页面将会卸载。任何待处理的请求都将被删除(尽管服务器将继续处理它已经看到的任何请求,但这无法帮助)。如果帖子也是通过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();
答案 1 :(得分:1)
在调用每个ajax请求之前,让它检查标志。比方说,它可能会在页面加载时被CARRY_ON = true;
现在按下提交按钮时,将标志更改为false。然后将要停止所有未来的ajax。
答案 2 :(得分:1)
当您提交表单时,将自动终止其他客户端执行。
如果使用Ajax提交,则可以保留一个标志(全局变量)来停止循环。