没有重定向/ GET的POST?

时间:2011-12-17 16:32:22

标签: post-redirect-get

我的一位同事正致力于防止重复提交表单(成功提交后,我们会通过电子邮件发送并创建数据库条目)。如果表单上有错误,提交内容不会成功。

我正在审查他的代码,我注意到他只使用P / R / G成功提交。如果表单提交不成功,表单提交仍将在刷新/重新访问时重复。我在我的评论中注意到了这一点,但他认为他没有看到每次重定向的好处,因为忽略了不成功的提交。我注意到,如果用户刷新页面或在历史记录中重新访问它,他们仍会在主要浏览器中收到“确认表单重新发送”警告。

这是否足以成为每次POST后重定向的理由?无论是否,即使提交是幂等的(由于表单中的错误),在POST之后还有任何其他原因需要重定向吗?是否有理由在提交表单后重定向?

2 个答案:

答案 0 :(得分:3)

主要原因是,当您点击“返回”或“重新加载”按钮时,每个现代浏览器的令人讨厌的对话框都会打开(人们会在POST操作后经常,无论您是否想要它们),警告你将重新提交POST即将发生。我当然明白为什么他们选择这样做,但它确实意味着作为程序员我们会竭尽全力确保用户不必看到消息。

所以,我不同意那些说在没有成功的帖子之后没有理由重定向的人。从理论上讲,不应该有一个,是的,但由于浏览器的用户界面问题,是的,绝对需要。

答案 1 :(得分:0)

POST失败后没有理由重定向。重复它不会造成任何伤害,它会让您的生活更轻松,因为您不需要在会话中存储所有表单值以重新填写表单。

除此之外,在开发期间,它使事情变得更加容易,特别是在使用文件上传字段时,因为您可以使表单提交始终失败,然后按F5直到所有验证代码等都正常工作。