2010-08-10 130 views
0

我有一个默认值的搜索表单。 当用户使用页面时,onload会调用一个函数。从循环外部打破循环

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

我花了大约20到30秒将执行所有的Ajax请求。

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

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

谢谢。

+0

20到30秒?对于AJAX调用似乎相当长... – scunliffe 2010-08-10 13:26:23

+0

如果AJAX请求异步完成(因为他们可能会这样做,因此_A_JAX),请求会相互之间很快被触发。它们可能需要大约30秒才能完成,但请求已经发送完毕。 – 2010-08-10 13:27:20

回答

1

在调用每个ajax请求之前,它会检查一个标志。举例来说,它可能在页面加载时被初始化为CARRY_ON = true;

现在,当按下提交按钮时,将该标志更改为false。然后所有未来的ajax请求将被停止。

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

当您提交表单时,自动终止其他客户端执行。

如果您使用Ajax提交,那么您可以保留一个标志(全局变量)来停止循环。