2012-08-10 18 views
0

我有一個存儲在MySQL數據庫中的時間戳,並且我想定期(比如說每秒)更新當前時間和存儲在數據庫中的時間戳值之間的差異(當然,不需要重新加載頁面)以顯示類似一個5分鐘的倒計時器。馬上。我想使用setTimeout定期觸發一個AJAX請求獲取這個值。這是最好的方法嗎?相反,我應該只運行一個客戶端計時器,然後每分鐘同步它與服務器端時間戳?如何定期更新網頁上的服務器端值?

注意:這個計時器是負責我網站上的一個重要功能,所以它應該是相當準確的。

編輯:我不需要一個cron作業,我只需要一個倒計時器,它可以在5:00到4:59到4:58等網頁上自動更新。如果您熟悉Megaupload在關機之前所擁有的功能,我需要類似的東西。

+1

'every second' =糟糕的主意。很多網絡流量,很多數據庫流量,只是爲了追蹤時間?計算機已經有一些東西叫做「時鐘」 - 我被告知它們非常受歡迎;-) – DaveRandom 2012-08-10 13:21:44

+0

我該怎麼做?它會是客戶端計算機的時鐘嗎?我需要確保這個計時器是準確的,不能被客戶篡改。 – hesson 2012-08-10 13:23:38

+0

這裏的用例是什麼?您是否想要禁用某些內容或阻止用戶在某段時間過後提交表單或其他內容? – DaveRandom 2012-08-10 13:24:29

回答

1

由於Javascript工作方式的性質,確切的計時器幾乎不可能實現(請參閱此處瞭解更多詳細信息)。

但是,你可以做一些非常接近它的事情,我建議你想做的是做所有的客戶端(這是用戶篡改,但最小的資源消耗),更重要的是使用服務器端驗證以防止用戶篡改它。因此,您在開始時在數據庫中設置了一個值,表示「不接受x時間之前的提交」,然後客戶端可以處理計時器。

Here is a very small example of how it can be done

1

這取決於你想完成什麼。

如果您需要處理一些與網站相關的內容,例如每5分鐘一次,然後使用cron作業。

如果要通過更新每個示例的評論列表來提高用戶體驗,請使用ajax。

1

所以你想要一個服務器,所有這些壓力。

可以假設服務器和客戶端上的時鐘都有第二個持續時間長於兩者,並且可能需要一週(如果很差)分歧。

但客戶可能認爲這是在午夜1972年1月1日,但你的服務器認爲它是14點25分上週五8月10日2012年

所以只是通過從服務器到客戶端該日期。計算差異。在頁面上,您可以將服務器日期/時間放在頁面上,只需使用Javascript。

至於網站(服務器位)只依賴服務器的時間。你可以控制。

倒計時器只是一個愉快的事情。但服務器的東西是你的資產和你做生意的地方。如果你依靠客戶,一些討厭的人可以重置時間。

相關問題