Tôi tìm thấy cách giải quyết tiếp theo. Bạn có thể thoát khỏi chuyển hướng sau khi xử lý POST
yêu cầu bằng cách thao tác history
đối tượng.
Vì vậy, bạn có dạng HTML:
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Khi bạn xử lý biểu mẫu này trên máy chủ của mình, bạn thay vì chuyển hướng người dùng đến /the/result/page
bằng cách thiết lập Location
tiêu đề như thế này:
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
Sau khi xử lý POST
dữ liệu ed, bạn kết xuất nhỏ <script>
và kết quả/the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
Các <script>
bạn nên làm:
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Kết quả là:
như bạn có thể thấy dữ liệu biểu mẫu được POST
chuyển thành process.php
tập lệnh.
Kịch bản lệnh này xử lý POST
dữ liệu ed và kết xuất /the/result/page
cùng một lúc với:
- không chuyển hướng
- không có
POST
dữ liệu lại khi bạn làm mới trang (F5)
- không gặp lại
POST
khi bạn điều hướng đến trang trước / trang tiếp theo thông qua lịch sử trình duyệt
CẬP NHẬT
Như một giải pháp khác, tôi yêu cầu tính năng yêu cầu nhóm Mozilla FireFox cho phép người dùng thiết lập NextPage
tiêu đề sẽ hoạt động giống như Location
tiêu đề và làm cho post/redirect/get
mẫu bị lỗi thời.
Nói ngắn gọn. Khi máy chủ xử lý POST
dữ liệu mẫu thành công, nó:
- Thiết lập
NextPage
tiêu đề thay vìLocation
- Kết xuất kết quả xử lý
POST
dữ liệu biểu mẫu vì nó sẽ hiển thị cho GET
yêu cầu theo post/redirect/get
mẫu
Trình duyệt lần lượt khi thấy NextPage
tiêu đề:
- Điều chỉnh
window.location
theo NextPage
giá trị
- Khi người dùng làm mới trang, trình duyệt sẽ thương lượng
GET
yêu cầu NextPage
thay vì tạo lại POST
dữ liệu
Tôi nghĩ rằng điều này sẽ xuất sắc nếu được thực hiện, phải không? =)