最终用户经常被告知不要两次点击提交按钮,以便完成交易;并且,有不同的技术用于解决这种情况。
最近,有人问我,“你做了什么来处理用户在提交后进行页面刷新的情况”,这意味着这将导致双重提交或其他问题。
如果这是一个需要处理的真正问题,请告诉我......情况如何以及如何最好地解决问题,如果有的话。
答案 0 :(得分:10)
解决此问题的最佳方法是使用Post/Redirect/Get pattern。
答案 1 :(得分:2)
如果您的用户倾向于刷新页面,则听起来您的服务方式的响应时间太长。在提交时禁用提交按钮,并显示某种加载指示符,直到响应返回。
或者,立即在服务器上进行响应,并将操作排入队列以供日后使用。例如,Linode将服务器行为排队,而不是立即运行“请求调整分区大小”。您可以将此方法概括为其他行为,甚至可以使用ajax显示进度指示器等内容。
答案 2 :(得分:2)
是的,这是一个真正的问题,除非你处理好。在大多数浏览器的实践中,当用户点击刷新时,重新提交数据,如果您在服务器端没有检查这一点,则会导致您采取相同的操作两次(例如,对信用卡收费两次,重复论坛帖子等。 )。
处理此问题的方法是检查用户之前是否已发过帖子。例如,如果您正在构建论坛,则会发送一个带有帖子的唯一ID的隐藏变量。在解析发布的数据时,您将此唯一ID保存到数据库中。如果您遇到一个已保存的唯一ID的帖子,您知道您正在查看客户端的“刷新”,而您只是忽略该帖子。
希望这有帮助!
答案 3 :(得分:1)
是的,这是一个真正的问题,但我相信这通常是由浏览器处理的。例如,Chrome会在页面刷新时通知您,如果结果将数据发布到服务器,并为您提供继续或中止的选项。
编辑:
实际上......想到这一点,我确实必须在工作中处理这个问题。我最终做的是在页面上创建一个阴影框,直到过程完成
答案 4 :(得分:1)
是的,这可能是个问题(实际上很多网站都存在问题)。 但我认为这更像是与Javascript相关的服务器端相关问题。 最佳做法是使用Post/Redirect/Get模式(因为您在提交后询问有关刷新的具体信息)。
答案 5 :(得分:0)
“你做了什么来处理用户在提交后进行页面刷新的情况”
在成功提交表单后,您应重定向到页面。
这可以防止用户再次提交数据,并防止浏览器发出错误的警报,说明数据将再次提交。