我的 ASP.NET MVC 页面使用 JavaScript/jQuery 每秒轮询我的数据库。
这是有效的,但我想确保,如果有延迟,我的计时器处理程序在返回之前不会被再次调用。
除了将计时器 ID 存储在全局变量中、清除我的处理程序中的计时器并在我的处理程序完成后重新启动它之外,还有其他技巧。
注意:我意识到每一秒似乎都很频繁,但这段代码在提交信用卡付款后正在轮询我的服务器。通常,它只会运行一秒钟左右,我不希望用户等待超过必要的时间。
最佳答案
每秒轮询?太重了!
除此之外,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();
关于javascript - 防止 JavaScript 定时器重新进入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9967837/