2011-05-17 141 views
0

我的服務器每晚在午夜運行一些數據庫維護腳本。爲了防止最終用戶的干擾,所有會話在執行前幾分鐘終止。爲了讓用戶在做重要事情時不被粗暴地中斷,倒數計時器顯示剩餘時間。這是通過將預處理期間的服務器時間(php)導出到JS變量並在簡單的循環顯示例程中循環縮短秒數來完成的。按下後退按鈕後刷新JS coutndown定時器?

然而,如果用戶通過按下後退按鈕導航到頁面,顯示的時間將不同步,但大部分時間都按預期工作。有沒有一種方法可以確保腳本在每次查看頁面時都獲取最新的服務器時間,即使在按下後退按鈕後查看該時間?

這很簡單...

var seconds = <?php echo $time_left; ?>; 
function display_timer() 
{ 
    seconds--; 
    minutes = parseInt((seconds/60) % 60); 
    hours = parseInt(seconds/3600); 

    ds = seconds % 60; 
    ds = ds > 9 ? ds.toString() : '0' + ds.toString(); 
    dm = minutes > 9 ? minutes.toString() : '0' + minutes.toString(); 
    dh = hours > 9 ? hours.toString() : '0' + hours.toString(); 

    document.getElementById('countdown').innerHTML = 'Time left: ' + dh + ':' + dm + ':' + ds; 

    if (seconds) 
    { 
     setTimeout("display_timer()", 1000); 
    } 
} 

display_timer(); 
+0

似乎它可能是一個緩存問題。你能發佈一些代碼來更好地瞭解發生了什麼嗎? – neolaser 2011-05-17 06:33:12

回答

0

您可以使用Ajax調用刷新(同步)時間客戶端與服務器。您需要做的就是確定最佳時間間隔,之後您將發送Ajax呼叫以同步時間。

+0

你的意思是定期刷新它們所在的頁面?如果頁面包含表單等,這不會成爲問題嗎? – solarsnowfall 2011-05-17 07:03:08

+0

是的我的意思是這樣..不,它不會是問題,你可以同步你的客戶端與服務器時間。 – 2011-05-17 07:28:51

0

烏馬爾的建議可行。也許是更基本的一點:如果剩下的時間在服務器端計算,那麼如何將剩餘的時間傳遞給客戶端,然後從那裏啓動倒計時器。每當用戶加載頁面,它將得到一個準確的時間,從開始,然後不必不斷地發送呼叫到服務器

+1

好的,和我一樣的概念,但爲什麼要麻煩使用ajax? – neolaser 2011-05-17 06:58:47

+0

什麼是替代呢? – solarsnowfall 2011-05-17 07:05:22

+0

它與您提到的相同,但數據將在頁面加載時發送,無需使用ajax – neolaser 2011-05-17 07:17:48