10

我有以下 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 秒?

4

7 回答 7

36

您不能使用 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 引入并得到大多数 Web 浏览器支持的专有、非标准标头扩展。

于 2012-07-02T18:20:02.770 回答
3

使用客户端脚本进行重定向:

<script>
window.setTimeout(function() {
    window.location = 'page2.php';
  }, 5000);
</script>
<p>Message has been sent.</p>
于 2012-07-02T18:21:09.510 回答
3

您必须像这样修改您的代码:

<?php

    echo "Message has been sent.";
    sleep(5);
    header("Location: page2.php", true, 303);
    exit;
?>
于 2013-10-30T23:07:16.393 回答
2

如果您使用标头(位置)重定向,您将无法看到该消息。事实上,该重定向根本不应该工作,因为输出在发送标头之前开始。相反,您应该延迟回显元标记刷新,例如 echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

延迟 5 秒。或者,(更准确地说)您可以输出 JS 重定向,因为元刷新标签已被弃用。

于 2012-07-02T18:19:50.820 回答
0

我不知道它是否有帮助,但是当我在提交消息后需要清理的表单中处理相同的问题时,我发现这个答案解释了您可以将值输入更改为空。

这就是答案: 当页面重新加载时,如何重置文本输入的值?

这就是我使用我的类 .form-control 解决问题的方法

$(document).ready(function() {
   $(".form-control").val('');
});
于 2014-01-12T00:43:35.117 回答
0
header( "Refresh:time; url='filelocation'");
于 2018-04-02T07:05:02.527 回答
0

这对我有用...我在 WAMPP for Windows 上使用最新的 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\'">';

我希望这有帮助。

于 2019-03-14T01:36:28.230 回答