我的ASP.NET MVC页面每秒使用JavaScript / jQuery轮询我的数据库。
这是有效的,但我想确保,如果有延迟,我的计时器处理程序将不会再次被调用。
除了将计时器ID存储在全局变量中之外,还有任何技巧,清除处理程序中的计时器,并在处理程序完成后重新启动计时器。
注意:我意识到每一秒似乎都很频繁,但此代码在提交信用卡付款后轮询我的服务器。通常情况下,它只运行一秒左右,我不希望用户等待超过必要的时间。
答案 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)
根据我的个人经验,“全局”(在根函数内部),变量在此实例中运行良好,因此您可以控制何时清除和重新启动。如果响应真的像你说的那么快,这不应该导致过多的开销(清除/重置),并且可以考虑到这些类型的情况。