防止JavaScript计时器重新进入

时间:2012-04-01 20:02:54

标签: javascript jquery timer setinterval

我的ASP.NET MVC页面每秒使用JavaScript / jQuery轮询我的数据库。

这是有效的,但我想确保,如果有延迟,我的计时器处理程序将不会再次被调用。

除了将计时器ID存储在全局变量中之外,还有任何技巧,清除处理程序中的计时器,并在处理程序完成后重新启动计时器。

注意:我意识到每一秒似乎都很频繁,但此代码在提交信用卡付款后轮询我的服务器。通常情况下,它只运行一秒左右,我不希望用户等待超过必要的时间。

3 个答案:

答案 0 :(得分:5)

每秒轮询一次?那太重了!

除此之外,当使用setTimeout代替setInterval时,您不会遇到此问题。后者确保一段代码在给定间隔的情况下运行x次,而前者确保延迟至少为x毫秒。

function some_poller() {
    $.ajax({
       url: '/some_page',
       success: function() {
           setTimeout(some_poller, 1000);
       },
       error: function() { // Also retry when the request fails
           setTimeout(some_poller, 1000);
       }
    });
}

// Init somewhere
some_poller();

答案 1 :(得分:1)

不是真的,虽然我不建议使用全局变量。把它贴在某个功能中。

但你真的确定你需要每秒进行一次投票吗?这是一个非常讨人喜欢的界面。

答案 2 :(得分:0)

根据我的个人经验,“全局”(在根函数内部),变量在此实例中运行良好,因此您可以控制何时清除和重新启动。如果响应真的像你说的那么快,这不应该导致过多的开销(清除/重置),并且可以考虑到这些类型的情况。