已解决:找到答案:WordPress会在每次加载页面时使用window.history.replaceState
。这可以防止刷新/返回时重新提交POST。原始问题仍然如下:
我知道这里有很多Post / Redirect / Get问题。这个有点不同。我无法找到解释此特定JavaScript解决方案的答案。
当您通过POST提交表单然后点击刷新按钮后,浏览器将提示我重新提交数据。 HOWEVER 此提示不会发生在WordPress后端(启用JS时)并且Post后没有Redirect / Get。
我试图在下面的一系列屏幕截图中展示这一点。它显示了第一个POST提交,并在页面上打印了POST数据,然后刷新导致GET,而没有任何浏览器重新提交提示。
当我禁用JavaScript并点击刷新时,我会得到预期的"您要重新提交数据吗?"提示和刷新导致第二次POST。
所以wordpress在这里做了一些JavaScript魔法,以防止刷新/返回按钮上的POST数据重新提交。
有人能指出我在WordPress中的代码,它显示了他们如何仅使用JavaScript实现这一目标吗?我不知道从哪里开始搜索。
他们是否对pushstate做了什么?
谢谢!
答案 0 :(得分:4)
解决方案:WordPress会在每次加载页面时使用window.history.replaceState
。
这可以防止POST
在刷新或后退按钮上再次运行。
妙的!
非WordPress概念验证:https://dtbaker.net/files/prevent-post-resubmit.php
代码是:
<script>
if ( window.history.replaceState ) {
window.history.replaceState( null, null, window.location.href );
}
</script>
答案 1 :(得分:-1)
它实际上没有魔力也没有奇迹!
问题不在于你的JS,它是你的HTML!
因为浏览器优先考虑POST方法表单,所以他们认为这很重要,所以使用GET方法会让您不再重新提交提示
本文将从技术上更具描述性 Read It