我正在使用我在下面分享的纯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>
标签中执行相同的操作。
我知道以下代码,但我也想要一个倒数计时器,以便向访客显示。
<?php header('Refresh: 5; URL=http://jsfiddle.net/'); ?>
<meta http-equiv="refresh" content="5;url=http://jsfiddle.net/">
答案 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
$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
对于这部分,我建议你使用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/">';
?>`