【问题标题】:Refreshing a JS coutndown timer after pressing the back button?按下后退按钮后刷新 JS 倒数计时器?
【发布时间】:2011-05-17 06:27:24
【问题描述】:

我的服务器每晚午夜运行一些数据库维护脚本。为了防止来自最终用户的干扰,所有会话都会在执行前几分钟终止。为了让用户在做重要的事情时不会被粗鲁地打断,倒数计时器会显示剩余时间。这是通过在预处理 (php) 期间将服务器时间导出到 JS 变量并在简单的循环显示例程中循环降低秒数来完成的。

这在大多数情况下都可以正常工作,但是,如果用户通过按后退按钮导航到页面,则显示的时间将不同步。有没有一种方法可以确保每次查看页面时脚本都获取最新的服务器时间,即使在按下后退按钮后查看也是如此?

这很简单...

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();

【问题讨论】:

  • 似乎可能是缓存问题。你能发布一些代码来更好地了解发生了什么吗?

标签: php javascript


【解决方案1】:

您可以使用 Ajax 调用在客户端与服务器刷新(同步)时间。您需要做的就是确定您将发送 Ajax 调用以同步时间的最佳时间间隔。

【讨论】:

  • 您的意思是定期刷新他们所在的页面?如果页面包含表单等,这不会有问题吗?
  • 是的,我的意思是......不,这不会有问题,您可以将您的客户端与服务器时间同步。
【解决方案2】:

乌玛尔的建议会奏效。也许是一些更基本的东西:如果剩余时间是在服务器端计算的,那么你如何将剩余时间传递给客户端,然后从那里启动倒数计时器。每次用户加载页面时,它都会得到一个准确的开始时间,然后不必不断向服务器发送调用

【讨论】:

  • 啊好吧,和我的概念一样,但是为什么要使用ajax呢?
  • 那么有什么替代方案?
  • 它和你提到的一样,但是数据会在页面加载时发送,不需要ajax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2012-02-22
  • 1970-01-01
相关资源
最近更新 更多