防止JavaScript计时器重新进入

Jon*_*ood 2 javascript jquery timer setinterval

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

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

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

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

Rob*_*b W 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();
Run Code Online (Sandbox Code Playgroud)