ฉันพบวิธีแก้ไขปัญหาถัดไป คุณสามารถหลีกเลี่ยงการเปลี่ยนเส้นทางหลังจากดำเนินการ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
ed ข้อมูลและแสดงผล/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
ข้อมูลแบบฟอร์มใหม่
ฉันคิดว่าสิ่งนี้จะยอดเยี่ยมหากใช้งานจะไม่? =)