jQuery Countdown IE刷新问题

时间:2011-07-26 23:07:24

标签: php ajax jquery

我正在使用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,那么它使用的本地机器时间也可能不正确。

服务器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 个答案:

答案 0 :(得分:1)

如果async为true,则无法从该函数返回时间。 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);

我建议使用async ajax调用,将随机数生成添加到URL然后使异步工作,您不能使用serverTime的返回值,而是必须通过调用继续您的控制流成功处理程序中的函数。