[英]Weird behavior with SetTimeout
我試圖每 20 秒用 JavaScript 刷新一個 div。 這是我的代碼:
$(document).ready(function(){
refreshTable();
updateTable();
});
function updateTable(){
setTimeout( refreshTable, 20000);
updateTable();
}
function refreshTable(){
$('#table_list').load('table')
}
一旦頁面准備好,我就可以開始倒計時了。 但是這段代碼每 3 秒更新一次表。 有人能幫我嗎? 我究竟做錯了什么?
Ps:我在這里看到這是一個常見問題,但是我看到的任何問題都可以幫助我。
你有無限遞歸:
function updateTable(){
setTimeout( refreshTable, 20000);
updateTable(); // Infinite recursion.
}
您應該使用 setIinterval 而不是進行 setTimeout 循環。
當文檔准備好時,您調用updateTable
。
20秒后,它會調用refreshTable
但它會立即調用updateTable
一次。 所以排隊的另一個refreshTable
,然后點擊updateTable
一次。 這使它陷入無限循環……或者至少進入堆棧溢出。
您需要:
updateTable
從內refreshTable
而不是updateTable
ready
處理程序中使用setInterval
而不是使用setTimeout
正如其他答案所指出的那樣,您的 updateTable 函數中有無限遞歸。 您可以改為使用 setInterval,它會定期運行指定的 refreshTable 函數:
$(document).ready(function(){
refreshTable();
setInterval(refreshTable, 2000)
});
function refreshTable(){
$('#table_list').load('table')
}
$(document).ready(function(){
window.setInterval( function(){
$('#table_list').load('table');
}, 20000);
});
這可能會幫助你,至少我希望如此:D
我建議您使用 jQuery 方法“.load()”的“完整”回調
$(document).ready(function(){
refreshTable();
});
function refreshTable(){
$('#table_list').load('table', function(){
setTimeout( refreshTable, 20000);
});
}
因此,將在執行查詢處理和 HTML 插入后執行 setTimeout。 請注意,我們不再需要“updateTable”輔助函數,因為我們現在遞歸調用“refreshTable”函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.