2012-06-02 2 views
8

Я хочу создать кнопку для перезагрузки страницы без потери $_POST данных и $_SESSION.
В Интернете я нашел этот кусок кода:"location.reload()" теряет данные POST/SESSION? (F5/Ctrl + R хранит данные?)

onclick="document.location.reload();" 

А вот код моей кнопки:

<a class="button" href="" style="font-size: 0.7em; padding: 5px 10px;" onclick="document.location.reload();">Recharger la page</a> 

Но когда я нажимаю на кнопку, я теряю $_POST данные и $_SESSION.

Если я пытаюсь с помощью команды клавиатуры Ctrl + R (Chrome) или F5 (Firefox, IE9), браузер показывает предупреждение, чтобы уведомить меня, что я снова пытаюсь представить форму. Если я соглашусь, это сработает.

Как я могу воспроизвести этот вид обновления браузера с помощью команды JavaScript? Или неправильный код моей кнопки?

Большое спасибо за помощь.

ответ

2

Это должно произойти в любом случае, если вы находитесь в том же месте, в котором вы отправили сообщение. Однако, как правило, перенаправление после запроса POST позволяет избежать того, что вы пытаетесь сделать.

Причина, по которой ваш код не работает, заключается в том, что href="" вызовет запрос GET на текущий URL. Используйте href="#", чтобы предотвратить его загрузку «новой» страницы или добавьте return false; в конце вашего кода onclick="...".

+0

Когда в пресс-F5 в Firefox, например, он прекрасно работает. Я просто хочу найти способ сделать это с помощью кнопки javascript? – Zorkzyd

+0

'location.reload()' должен выполнять задание, как вы можете видеть на http://jsfiddle.net/ThiefMaster/thTyD/ (обратите внимание, что сначала нужно нажать «Запустить», чтобы панель вывода фактически загружалась через POST). – ThiefMaster

+0

Но мой код выше не работает ... onclick = "document.location.reload();". Это связано с href = ""? – Zorkzyd

0

Ctrl + R обновляет страницу и очищает кеш. И я полагаю, вы используете Internet Explorer? Некоторые другие браузеры ведут себя, как это, когда вы попали Ctrl + F5, но не с Ctrl + R

Источники:
https://superuser.com/questions/205279/ctrlf5-vs-ctrlr-on-browsers
Browser issue in Ctrl-R

+0

Я обычно работаю в FF, но я нахожусь в проекте, который требует быть перекрестными браузерами :) – Zorkzyd

9

Попробуйте использовать

location.reload(true); 

Это будет выполнять "жесткий" обновление, не просто перестроить DOM, а также повторно загрузить любой ресурс с сервера.

You can read more at the Mozilla Developer wiki.

По-видимому, location.reload() является эквивалентом F5 в сценарии, в то время как Ctrl+F5/Ctrl+R могут быть смоделированы с использованием location.reload(true).

Кроме того, как уже упоминалось ThiefMaster, вы упускаете ;return false в конце вашего onclick заявление, или вы должны установить href в javascript:void 0*, чтобы предотвратить браузер из следующих по ссылке.

* Или любой другой кусок JavaScript, который возвращает undefined

+0

Когда я использую location.reload (true), браузер дает предупреждение, чтобы сообщить, что я снова пытаюсь отправить форму. Если я соглашусь, это не сработает. Это связано с href = ""? – Zorkzyd

+0

Это связано с тем, что браузер перезагружается с использованием тех же параметров и метода запросов, что и при загрузке страницы в первый раз. Если вы не хотите повторять это, вы можете лучше сначала сохранить данные в $ _SESSION, а затем сделать 'header (« 303 See Other »)' и 'header (" Location: $ _SERVER ['REQUEST_URI'] ") 'для перезагрузки страницы с помощью запроса GET. – user2428118

+0

Спасибо за ваш ответ, но ThiefMaster дал мне решение :) – Zorkzyd

Смежные вопросы