$(document).ready + setInterval =运行多个实例

时间:2014-06-02 23:37:15

标签: javascript jquery timer

我的网络应用程序目前使用它启动客户端的通知检索:

$(document).ready( getNotifications() );

这很棒,但我需要每隔XXX秒运行一次,所以我在getNotifications()末尾添加了一个setInterval计时器,这里:

function getNotifications() {

    //(do stuff)

    //now repeat every X seconds (10000 = 10s)
    setInterval(getNotifications, 30000);
}

问题 - 这样做似乎触发了定时器循环功能的多个实例。使用alert()我可以看到每个计时器周期都会创建一个新的实例设置到计时器,而不是根据需要迭代同一个实例。

如何在没有多个实例的情况下为我的功能获取计时器/循环?

谢谢!

2 个答案:

答案 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
}