簡體   English   中英

SetTimeout 的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM