задержка размещения заголовка

У меня есть следующий 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(''); });