我找到了下一个解决方法。您可以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
格式化数据
我认为,如果实施,效果会很好,不是吗? =)