2012-08-22 120 views
0

我正在嘗試使用setTimeout。我希望它每五秒執行一次,但不是在調用setTimeout時立即執行。我無法得到它的工作:setTimeout不執行第一次

firsttime = true; 
window.setTimeout(function() { 
    if (!firsttime) { 
     window.location.reload(); 
    } 
    firsttime = false; 
}, 5 * 1000); 
+6

你真的意味着「我***不***希望它的工作」? –

+1

您的代碼總計首次設置爲false; – j08691

+0

你認真*想每5秒鐘重新加載一次頁面嗎?如果是這樣,我建議AJAX。 –

回答

3

setTimeout只運行一次。

setInterval每X毫秒運行一次。

firsttime = true; 
window.setInterval(function() { 
    if (!firsttime) { 
     window.location.reload(); 
    } 
    firsttime = false; 
}, 5 * 1000); 
+2

他在超時時間內調用'window.location.reload()','setInterval()'可能並不像預期的那樣工作...... –

+0

@TomaszNurkiewicz:我認爲'reload'只是一個例子, *真的*這樣做。 –

2

您正在尋找setInterval。它採用相同的參數,但每X秒執行一次回調,而不是一次。

+3

如果他正在重新加載頁面,'setInverval()'將不起作用。那麼,它只會每隔一次。 –

1
if (!firsttime) { 
     window.location.reload(); 
    } 
    firsttime = false; 

,因爲你叫暫停在5秒內這將只執行一次:

window.setTimeout(function() { 
}, 5 * 1000); 

當你希望它繼續執行每5秒;使用setInterval:

firsttime = true; 
window.setInterval(function() { 
    if (!firsttime) { 
     window.location.reload(); 
    } 
    firsttime = false; 
}, 5 * 1000); 

但是, 10秒的setTimeout就足夠了:

window.setTimeout(function() { 
    window.location.reload(); 
}, 10 * 1000); 

因爲當頁面重新加載

6

一旦你window.location.reload()您的網頁,所有的JavaScript變量和定時器都將丟失變量firsttime將重置爲true。當頁面第二次加載時,firsttime再次是true

所以你要做的是:當用戶第一次進入頁面時,刷新10秒後。然後每5秒刷新一次。問題是:HTTP是statelss,每次用戶進入頁面時,它第一次是。兩者之間沒有記憶或狀態。

你可以做的是:

  • 使用cookie或HTTP會話記住用戶已經輸入的頁面。你第一次使用setTimeout() 10秒。在該頁面上的每個後續條目中,您使用5秒(setInterval()在這裏不值錢)

  • 進入first.html後等待10秒鐘並重定向到second.html。完全相同,但硬編碼5秒延遲。查詢參數或散列標籤也可以用來保持狀態。雖然有點哈克。

  • 刷新整個頁面偶爾是如此2000年。考慮和部分DOM更新。

2

setTimeout只運行一次,在這一點上,條件(!firsttime)不成立(如firsttimetrue,所以什麼也不會發生。

可以把這個檢查。該功能將負荷第一次執行將在指定的延遲之後執行。

如果您要重複執行,請檢查setInterval。但是你應該認識到,window.location.reload();重新加載整個頁面,包括其中的JavaScript,所以它只能被執行一次(然後重新加載頁面,間隔被清除,JS重新初始化,並與另一個超時實例)。

也許HTML刷新會在你的情況更爲有用:

<meta http-equiv="refresh" content="5;url=yourwebpage">