SETTimeout函数立即调用,而不是在延迟后调用。

SETTimeout函数立即调用,而不是在延迟后调用。

我希望在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);
        }
    }}


森栏
浏览 636回答 2
2回答

米脂

函数对象在JavaScript中是一回事。函数打电话是另一回事。您使用的是后者,在函数名称*后面包含括号,但需要前者,而不需要括号。这允许setTimeout使用传入对象调用函数本身。假设您确实需要5秒(而不是原始代码使用的50秒):setTimeout(GetUsersNumber, 5000);*实际上,任何包含函数对象的旧变量都可以这样调用,但为了方便起见,定义函数还为它定义了一个变量名。

慕运维8079593

setTimeout接受一个函数作为参数。您要做的是立即执行该函数,而传递则是退出函数的返回值。经过,穿过GetUsersNumber而不是GetUsersNumber()..()将已经执行该函数。setTimeout(GetUsersNumber, 50000);附带说明:大多数现代浏览器本机支持XMLHttpRequest。因此,不需要使用ActiveXObject。对于较旧的浏览器,if条件无论如何都会产生错误。这样做:if(window.XMLHttpRequest)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript