Я нашел следующий обходной путь.Вы можете избежать перенаправления после обработки запроса POST
, манипулируя объектом history
.
Итак, у вас есть HTML-форма:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Когда вы обрабатываете эту форму на своем сервере, вы вместо перенаправления пользователя на /the/result/page
устанавливаете заголовок Location
следующим образом:
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
![enter image description here](https://i.stack.imgur.com/GiXX0.jpg)
После обработки POST
отредактированных данных вы визуализируете небольшой <script>
и результат /the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
<script>
, который вы должны визуализировать:
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Результат:
![enter image description here](https://i.stack.imgur.com/hqFCZ.jpg)
, как вы видите формуданные POST
редактируются в process.php
сценарий.
Этот сценарий обрабатывает POST
редактирует данные и обрабатывает /the/result/page
сразу с:
- без перенаправления
- нет данных
POST
при обновлении страницы (F5) - нет данных
POST
при переходе на предыдущую / следующую страницу по истории браузера
UPD
В качестве другого решения я прошу запрос функции команду Mozilla FireFox , чтобы пользователи могли настроить NextPage
заголовок, который будет работать как Location
заголовок и сделать post/redirect/get
паттрн устарел.
Короче.Когда процесс сервера формы POST
данные успешно это:
- Настройка
NextPage
заголовок вместо Location
- Отображать результат обработки
POST
данных формы, как это было бы сделатьдля GET
запроса в post/redirect/get
шаблоне
Браузер в свою очередь, когда видит заголовок NextPage
:
- Настройка
window.location
со значением NextPage
- Когда пользователь обновляет страницу, браузер будет согласовывать
GET
запрос на NextPage
вместо POST
данных формы
Я думаю, что это было бы превосходно, если бы реализовано, не будет?=)