2011-05-17 81 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