2011-07-26 76 views
0

我使用jQuery插件倒計時(http://keith-wood.name/countdownRef.html),並使用serverTime功能:jQuery的倒計時IE刷新問題

function serverTime() { 
    var time = null; 
    $.ajax({url: 'cgi/server-time.php', 
    async: false, dataType: 'text', 
    success: function(text) { 
     time = new Date(text); 
    }, error: function(http, message, exc) { 
     time = new Date(); 
    }}); 
    return time; 
} 

現在,當我點擊刷新,火狐是正確的,但IE瀏覽器將時鐘重置爲完全不正確的設置時間,即Firefox說44分鐘剩餘時間,IE說1小時36分鐘。

如果我將async設置爲true,那麼它使用的本地機器時間也可能不正確。

服務器time.php

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Fri, 1 Jan 2010 00:00:00 GMT"); // Date in the past 
$now = new DateTime(); 
echo $now->format("M j, Y H:i:s O")."\n"; 

回答

1

不能從該函數返回的時間,如果異步是真實的。 ajax調用是異步的。 serverTime函數返回時,它尚未完成ajax調用。如果你想使用返回的時間,你必須調用將從成功函數中使用它的函數。這是一個非常常見的錯誤 - 我可能在過去幾周寫了10-15次。

如果異步是錯誤的,那麼這應該工作,除非瀏覽器緩存你的php文件,儘管你的頁面在ajax調用期間會鎖定,直到它返回。

如果你想100%確保您的AJAX調用永遠不會返回一個緩存的結果,然後隨機查詢字符串追加到它像這樣所以它總是一個唯一的URL:

cgi/server-time.php?random=83987569284 

您可以創建一個隨機數是這樣的:

var php = "cgi/server-time.php?random=" + Math.floor(Math.random() * 10000000000); 

我會建議使用異步Ajax調用,加上隨機數生成的URL,然後使異步工作,你不能使用從serverTime的返回值,而是必須通過調用函數來繼續控制流程成功處理程序。