浏览器:仅使用JavaScript防止刷新时重新提交POST数据

时间:2017-08-13 01:53:02

标签: javascript wordpress

已解决:找到答案:WordPress会在每次加载页面时使用window.history.replaceState。这可以防止刷新/返回时重新提交POST。原始问题仍然如下:

我知道这里有很多Post / Redirect / Get问题。这个有点不同。我无法找到解释此特定JavaScript解决方案的答案。

当您通过POST提交表单然后点击刷新按钮后,浏览器将提示我重新提交数据。 HOWEVER 此提示不会发生在WordPress后端(启用JS时)并且Post后没有Redirect / Get。

我试图在下面的一系列屏幕截图中展示这一点。它显示了第一个POST提交,并在页面上打印了POST数据,然后刷新导致GET,而没有任何浏览器重新提交提示。

browser resubmit without post

当我禁用JavaScript并点击刷新时,我会得到预期的"您要重新提交数据吗?"提示和刷新导致第二次POST。

js disabled, normal post resubmit happens

所以wordpress在这里做了一些JavaScript魔法,以防止刷新/返回按钮上的POST数据重新提交。

有人能指出我在WordPress中的代码,它显示了他们如何仅使用JavaScript实现这一目标吗?我不知道从哪里开始搜索。

他们是否对pushstate做了什么?

谢谢!

2 个答案:

答案 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