Обновление страницы с временной задержкой без повторной отправки данных

tvolf

Новичок
Обновление страницы с временной задержкой без повторной отправки данных

Всем привет.

Такой вопрос. Есть такой фрагмент кода (просто смоделировал проблемную ситуацию):

PHP:
<?php
 if (isset($_POST['name1'])) {
     header('refresh: 5; url=' . $_SERVER['REQUEST_URI']);
     exit;
 }
?>
<html>
<head>
</head> 
<body>
  <form action="" method="POST">
    <input type="text" name="name1">
    <input type="submit" value="Submit">
   </form>
</body>  
</html>
То есть, по нажатию кнопки "Submit" должна подгрузиться та же самая страница с формой по прошествии 5 секунд. По идее, после этого обновление страницы в браузере по F5 не должно повторно выполнять запрос POST. Но почему-то это не работает. Попробовал посмотреть плагином HttpLiveHeaders заголовки запросов и ответов с момента нажатия кнопки "Submit" - вроде бы всё в порядке. Привожу их ниже:

===
http://test.local/test.php

POST /test.php HTTP/1.1
Host: test.local
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://test.local/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
name1=123

HTTP/1.1 200 OK
Date: Fri, 26 Mar 2010 16:25:00 GMT
Server: Apache/2.0.63 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
refresh: 5; url=/test.php
Content-Length: 0
Keep-Alive: timeout=15, max=96
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
http://test.local/test.php

GET /test.php HTTP/1.1
Host: test.local
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cache-Control: max-age=0

HTTP/1.1 200 OK
Date: Fri, 26 Mar 2010 16:25:05 GMT
Server: Apache/2.0.63 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Content-Length: 171
Keep-Alive: timeout=15, max=95
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
===

Заметил, что в IE6 (в отличие от Firefox 3.6.2) всё работает так, как и ожидается,
то есть, после перезагрузки страницы при нажатии F5 повторного запроса POST
нет (во всяком случае, нет всплывающего окна, в котором бы предлагалось переотправить данные).
Кто что думает по этому поводу ?
Заранее благодарю за поддержку.
 

dimagolov

Новичок
нужно делать не refresh, а переадресацию на страницу с формой, чтобы она запросилась через get
 

tvolf

Новичок
Вы имеете ввиду использование header('location:.. ? Но в этом случае отсутствует временная задержка, если я правильно понимаю. Или это можно как-то реализовать ? Просто что хочется сделать: допустим, есть страница с формой. Пользователь вводит в неё некоторые данные и нажимает "Отправить". Далее, скрипт с кодом этой же страницы получает данные, проверяет их, и если они некорректны по какой-то причине, формирует для вывода ту же самую страницу с добавлением сообщения об ошибке. А через некоторое время, достаточное для того, чтобы пользователь с этим сообщение ознакомился, страница сама перезагружается в первоначальное состояние. Может, я просто не так всё делаю :)
 

dimagolov

Новичок
перезагрузку с задержкой можно сделать через meta-refresh или JS.

если ты валидировал данные и они не корректны, то обычно просто отображают ту же заполненную форму (тоже через location), где отмечены ошибочные поля, и ничего автоматом не перегружается, просто даем пользователю возможность исправить ошибки и послать опять.
 
Сверху