我有以下PHP代码,我也想添加延迟:
<?php
echo "Message has been sent.";
header("Location: page2.php", true, 303);
exit;
?>
上面的代码发生得太快,所以我看不到消息:
我试过了:
<?php
sleep(5);
echo "Message has been sent.";
header("Location: page2.php", true, 303);
exit;
?>
这也不显示消息,但它会睡5秒,这只是浪费时间。
如何在重定向之前让它显示5秒的消息?
答案 0 :(得分:30)
您无法通过HTTP位置重定向执行此操作,因为只要浏览器获得标头,就会发生此重定向。而是在标题中使用刷新重定向:
header( "Refresh:5; url=http://www.example.com/page2.php", true, 303);
此 应该在现代浏览器上运行,但它不是标准化的,因此要获得等效功能,请使用元刷新重定向(意味着您还必须输出完整的HTML) :
<meta http-equiv="refresh" content="5;url=http://www.example.com/page2.php">
用于重定向,或者在创建新资源时使用。这个 X秒后刷新重定向。这是一种专有的,非标准的 由Netscape引入并由大多数网络支持的标头扩展 浏览器。
答案 1 :(得分:3)
使用客户端脚本执行重定向:
<script>
window.setTimeout(function() {
window.location = 'page2.php';
}, 5000);
</script>
<p>Message has been sent.</p>
答案 2 :(得分:3)
你必须像这样修改你的代码:
<?php
echo "Message has been sent.";
sleep(5);
header("Location: page2.php", true, 303);
exit;
?>
答案 3 :(得分:2)
如果您使用标头(位置)重定向,则无法看到该消息。事实上,由于输出在发送标头之前开始,因此该重定向根本不起作用。相反,您应该使用延迟回显元标记刷新,如下所示
echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';
这将延迟五秒钟。或者,(并且更恰当地)您可以输出JS重定向,因为不推荐使用元刷新标记。
答案 4 :(得分:0)
我不知道它是否有帮助,但由于我在提交消息后需要清理的形式处理相同的问题,我发现这个答案解释了你可以改变输入的值是空。
这就是答案: How do I reset the value of a text input when the page reloads?
这就是我使用我的类.form-control
解决我的问题的方法$(document).ready(function() {
$(".form-control").val('');
});
答案 5 :(得分:0)
header( "Refresh:time; url='filelocation'");
答案 6 :(得分:0)
这对我有用...我正在Windows的WAMPP上使用最新的PHP版本7.3.3 ...
<?php
$name = $_POST['name'] ?? null;
if(empty(trim($name))){
header("location: http://localhost/testsite/index.php");
}
echo 'Greetings '. $_POST['name'].', how can I help you?';
echo '<meta http-equiv="refresh" content="5;URL=\'http://localhost/testsite/index.php\'">';
我希望这会有所帮助。