从循环外部打破循环

时间:2010-08-10 13:22:10

标签: javascript prototype

我有一个包含默认值的搜索表单。 当用户浏览页面时,我会调用一个函数。

这个函数有一个循环,每次迭代都会调用一个Ajax请求。

我需要大约20到30秒才会执行所有Ajax请求。

在这些迭代期间,用户可以更改表单值并可以提交表单 在这些迭代完成之前。

当用户点击提交按钮时,有没有办法打破这个循环?

感谢。

3 个答案:

答案 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提交,则可以保留一个标志(全局变量)来停止循环。