一尘不染

setTimeout调用立即起作用,而不是延迟之后

javascript

我想在HTML页面上创建一个值,该值每5秒更新一次,以免使服务器不堪重负。事实证明,函数内部的setTimeout()不能正确延迟,而是立即被调用。有人可以帮我找到线索吗?我真的不想给我的服务器太多工作,因为我必须实现更多的AJAX。

这是代码:

window.onload = function GetUsersNumber() {
    aside = document.getElementById("users");
    if (XMLHttpRequest) var x = new XMLHttpRequest();
    else var x = new ActiveXObject("Microsoft.XMLHTTP");
    x.open("GET", "users_count.php", true);
    x.send();
    x.onreadystatechange = function () {
        if (x.readyState == 4) {
            if (x.status == 200) aside.innerHTML = x.responseText;
            setTimeout(GetUsersNumber(), 50000);
        }
    }
}

阅读 303

收藏
2020-04-25

共1个答案

一尘不染

JavaScript中的函数 对象 是一回事。函数 调用
是另一回事。您正在使用后者,方法是在函数名称*后加上括号,但是您需要前者,但不要加上括号。这允许setTimeout以后使用传入的对象来调用函数本身。假设您确实需要5秒(而不是原始代码使用的50秒):

setTimeout(GetUsersNumber, 5000);
  • 确实,可以像这样调用包含函数对象的任何旧变量,但为方便起见,定义函数也为其定义了变量名。
2020-04-25