Я знайшов наступне рішення. Ви можете уникнути перенаправлення після обробки 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();
?>
Після обробки POST
даних ed ви отримуєте невеликий <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>
Результат:
як ви бачите, дані форми 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
формувати дані
Я думаю, що це було б чудово, якби це було здійснено, чи не так? =)