[英]setTimeout calls function immediately instead of after delay
我想在 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);
}
}
}
setTimeout 接受一個函數作為參數。 您正在做的是立即執行函數並傳遞執行函數的返回值。 傳遞GetUsersNumber
而不是GetUsersNumber()
。 () 將已經執行該函數。
setTimeout(GetUsersNumber, 50000);
旁注:
if(window.XMLHttpRequest)
JavaScript 中的函數對象是一回事。 函數調用是另一回事。 您正在使用后者,方法是在函數名稱 * 之后包含括號,但您需要前者,沒有括號。 這允許setTimeout
稍后使用傳入的對象調用函數本身。 假設您確實需要 5 秒(而不是原始代碼使用的 50 秒):
setTimeout(GetUsersNumber, 5000);
*實際上,任何持有函數對象的舊變量都可以這樣調用,但為了方便起見,定義函數還為其定義了變量名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.