停止刷新重新提交表单

时间:2011-08-25 15:31:37

标签: javascript html perl cgi

我做了我的研究并找到了这个页面:

How do I stop the Back and Refresh buttons from resubmitting my form?

我希望如果我可以避免使用Post-Redirect-Get模式,而是在第一次提交时在表单中进行一些变量更改。但是,我不知道如何做到这一点,因为当你点击刷新时,想法是你要重新提交你刚才提交的表格。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

这通常在POST请求后通过重定向处理。单击后退将仅重定向用户。我知道你提到你想避免这种情况,但我看不出任何正当理由。

答案 1 :(得分:2)

当告知浏览器刷新时,它会重新发送它发送的最后一个请求。如果发送的最后一个请求是表单提交,则表单将重新提交。没有办法解决这个问题,因为这只是模型的运作方式。

为防止出现不良后果,您必须:

  • 使用post-redirect-get,以便最后一个请求(重新发送的请求)将是一个读取表单提交结果而不是表单提交本身的请求 或
  • 在表单中放置一个标识符,以便服务器可以忽略重新提交(尽管用户仍会看到“你想重新提交吗?”确认)

我不知道任何其他选项,并且考虑到“刷新”的工作方式,我真的不知道怎么会有其他的。在这两个选项中,post-redirect-get提供了最干净的用户体验,并且是理论上“纯粹”使用HTTP动词,所以它通常是首选的,IMO是正确的解决方案。

答案 2 :(得分:1)

在隐藏字段中发送带有表单的唯一表单标识符,例如UUID。跟踪您已经看过的UUID(可能是每个会话,因此您的数据库不会无限制地增长或需要偶尔修剪)并默默地忽略重新提交。