У меня есть следующий 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 секунд до перенаправления?
Вы не можете сделать это с перенаправлением 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 и поддерживаемое большинством веб-браузеров.
Сделайте перенаправление с использованием клиентских скриптов:
<script> window.setTimeout(function() { window.location = 'page2.php'; }, 5000); </script> <p>Message has been sent.</p>
Вы должны изменить свой код следующим образом:
<?php echo "Message has been sent."; sleep(5); header("Location: page2.php", true, 303); exit; ?>
Вы не сможете увидеть сообщение, если используете перенаправление заголовка (Location). Фактически, это перенаправление не должно работать вообще, поскольку вывод начинается до отправки заголовков. Вместо этого вы должны повторить обновление метатега с задержкой, например, это echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';
который будет иметь задержку в пять секунд. В качестве альтернативы (и более правильно) вы можете вывести перенаправление JS, так как метатекс обновления устарел.
я не знаю, помогает ли это, но поскольку я имел дело с одной и той же проблемой в форме, которая должна быть чистой после отправки сообщения, я нашел этот ответ, объясняющий, что вы можете изменить ввод значения пустым.
Это ответ: как сбросить значение текстового ввода при перезагрузке страницы?
и вот как я исправляю свою проблему, используя мой класс .form-control
$(document).ready(function() { $(".form-control").val(''); });