在纯PHP中重定向之前的CountDown计时器

时间:2014-08-18 09:19:34

标签: javascript php html redirect

我正在使用我在下面分享的纯JavaScript倒计时器,在一段时间后重定向到网址并向访问者显示剩余时间。

DEMO:JSFiddle

<form name="redirect" id="redirect"> 
You Will Be Redirected To Next Page After  <input size="1" name="redirect2" id="counter"></input>Seconds.
</form> 
<script type="text/javascript"> 
var countdownfrom=5
var currentsecond=document.redirect.redirect2.value=countdownfrom+1 
function countredirect(){ 
if (currentsecond!=0){ 
currentsecond-=1 
document.redirect.redirect2.value=currentsecond 
} 
else{ 
showIt() 
return 
} 
setTimeout("countredirect()",1000) 
} 
countredirect() 
function showIt() {
window.location.href = "http://jsfiddle.net/";
} 
</script>

现在我想要相同的功能和功能,并且在纯PHP中工作,因为你知道许多旧的移动浏览器仍然不支持JavaScript,许多人正在使用JavaScript阻止程序。那么这可以在纯PHP,没有<script>标签中执行相同的操作。

UPDATE:

我知道以下代码,但我也想要一个倒数计时器,以便向访客显示。

  • <?php header('Refresh: 5; URL=http://jsfiddle.net/'); ?>

  • <meta http-equiv="refresh" content="5;url=http://jsfiddle.net/">

5 个答案:

答案 0 :(得分:1)

答案:

这不能只用php完成,你需要使用jquery或javascript。 PHP是一种服务器端脚本语言,您必须使用客户端语言来完成此任务。

提示:

对于重定向目的只需在php中使用header()函数来重定向php文件。您的代码应该如下所示

<?php
    header( "refresh:5;url=http://jsfiddle.net" );
?>

希望这可以帮助你...

答案 1 :(得分:1)

如果你想要一些输出,你就不能使用header()。或者,您可以这样做:

echo "<pre>";
echo "Loading ...";

ob_flush();
flush();

$x = 0;
while($x <= 4) {
    $x++;
    echo '<br/>'. $x;
    ob_flush();
    flush();
    sleep(1);
}

echo '<meta http-equiv="refresh" content="0;url=http://jsfiddle.net/">';

答案 2 :(得分:0)

PHP是一种服务器端语言。如果没有一些非常复杂的设置,您无法控制浏览器的行为方式。即便如此,您无法保证在没有JavaScript的情况下显示倒计时的行为。对于限制JavaScript执行的浏览器,Refresh标头可以正常工作。但是,对于那些启用了JavaScript(现在是大多数浏览器,桌面和移动设备等)的人来说,简单的标题不会提供任何UI反馈,并且对于期望响应式应用程序和网页的用户来说是令人沮丧的。

出于这个原因,如果可以的话,可以添加JavaScript来增强自动,延迟,重定向,并为用户提供一些反馈。禁用JavaScript的用户只会看到一个静态页面,告诉他们页面将被重定向,以及他们需要等待多长时间。

PHP

<?php

  $redirectTimeout = 5;   // seconds

  header('Refresh:' . $redirectTimeout . ';url=http://jsfiddle.net');

  // ...

  // inside your <head>, add this
  echo '<meta http-equiv="refresh" ' . 
             'content="' . $redirectTimeout . ';url=http://jsfiddle.net">';

  // ...

  // inside your <body>, add this (or something similar)
  echo '<div>' . 
         'You will be redirected to next page after ' .
         '<span id="redirectCountdownLabel">' . 
           $redirectTimeout . 
         '</span> seconds' .
       '</div>';

  // ...

  // add JS below

的JavaScript

对于这部分,我建议你使用jQuery。它不仅可以编写更安全和跨浏览器的JS,还可以使您的代码更小更漂亮。此部分可以放在HTML中的任何位置,也可以放在使用.js标记添加的<script>文件中。为方便起见,您甚至可以使用CDN添加jQuery。

!function() {

$(function () {
  var meta = $('head meta[http-equiv="refresh"]');
  var label = $('#redirectCountdownLabel');
  var loadTime;
  var refreshTimeout;

  if (meta.length && label.length) {
    loadTime = window.performance.timing.domComplete;
    refreshTimeout = parseInt(meta.attr('content'), 10); // seconds

    new Timer(refreshTimeout * 1000, loadTime).start(200, function (elapsed) {
      // "elapsed" ms / 1000 = sec
      label.text(refreshTimeout - parseInt(elapsed / 1000));
    });
  }
});

function Timer(maxTime, startTime) {
  var timeout;
  var callback;

  startTime = startTime || Date.now();

  function nextTimer(delay) {
    timeout = setTimeout(function () {
      var curTime = Date.now();
      var elapsedTime = curTime - startTime;

      callback(elapsedTime);

      if (elapsedTime < maxTime) {
        nextTimer(delay);
      }
    }, delay);
  }

  this.start = function start(ms, cb) {
    stop();
    callback = cb;        
    nextTimer(ms);
  };

  this.stop = function stop() {
    if (timeout) {
      clearTimeout(timeout);   
    }
  };
};


}();

注意:此处为Timer课程的jsfiddle。)

答案 3 :(得分:0)

scusate per prima, ho postato male, sono ali inizi, sorry
<?php
echo "<pre>";
echo "Loading ...";
ob_flush();
flush();
$x = 21;
while($x >= 1) {
$x--;
echo '<br/>'. $x;
ob_flush();
flush();
sleep(1);
}
echo '<meta http-equiv="refresh" content="0;url=http://jsfiddle.net/">';

答案 4 :(得分:-2)

要做倒计时,所以它似乎有效或我错了吗?

<?php
echo "Loading ...";
ob_flush();
flush();
$x = 21;
while($x >= 1) {
    $x--;
    echo '<br/>'. $x;
    ob_flush();
    flush();
    sleep(1);
}
echo '<meta http-equiv="refresh"content="0;url=http://jsfiddle.net/">';
?>`