jQuery倒计时IE刷新问题


jQuery Countdown IE refresh issue

我正在使用jQuery倒计时插件(http://keith-wood.name/countdownRef.html)和使用serverTime功能:

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; 
 }

现在当我点击刷新时,Firefox是正确的,但是IE重置时钟为一个设定的时间,这是完全不正确的,即Firefox显示44分钟,IE显示1小时,36分钟剩余。

如果我设置async为true,那么它使用的是本地机器时间,这也可能是不正确的。

server-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"; 

如果async为true,则无法从该函数返回time。ajax调用是异步的。当serverTime函数返回时,它还没有完成ajax调用。如果你想使用返回的时间,你必须从成功函数中调用将要使用它的函数。这是一个很常见的错误——在过去的几周里,我可能已经写了10-15次了。

如果async是false,那么这应该工作,除非浏览器正在缓存您的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的返回值,而是必须通过调用来自成功处理程序的函数来继续您的控制流。