我的网络应用程序目前使用它启动客户端的通知检索:
$(document).ready( getNotifications() );
这很棒,但我需要每隔XXX秒运行一次,所以我在getNotifications()
末尾添加了一个setInterval计时器,这里:
function getNotifications() {
//(do stuff)
//now repeat every X seconds (10000 = 10s)
setInterval(getNotifications, 30000);
}
问题 - 这样做似乎触发了定时器循环功能的多个实例。使用alert()我可以看到每个计时器周期都会创建一个新的实例设置到计时器,而不是根据需要迭代同一个实例。
如何在没有多个实例的情况下为我的功能获取计时器/循环?
谢谢!
答案 0 :(得分:2)
将setInterval
更改为setTimeout
。
setInterval每隔X毫秒持续触发, setTimeout在x毫秒后触发一次
并且您不希望()
中的document.ready
。它正在调用getNotifications
,而不是为其分配引用。
function getNotifications() {
window.setTimeout(getNotifications, 30000);
}
$( getNotifications );
答案 1 :(得分:1)
或者,如何(通过不在其中包含重复信息来保持功能更清晰):
function getNotifications() {
//(do stuff)
}
$(function() { // this is $(document).ready( in a different form, see http://stackoverflow.com/questions/2662778/what-is-the-difference-between-these-jquery-ready-functions
getNotiifications(); // call it the first time
setInterval(getNotifications, 30000); // and every 30 seconds afterwards
}