我有一个处理的支付形式,但大约在每300个来支付两次,虽然,我的日志显示有所有这些事件的两个请求。表单提交两次
我实现了一些JavaScript禁用它后点击提交按钮,它似乎为我工作得很好,但我仍然得到双重提交飘飞。
有谁知道其他任何可能会导致表单提交两次?
我有一个处理的支付形式,但大约在每300个来支付两次,虽然,我的日志显示有所有这些事件的两个请求。表单提交两次
我实现了一些JavaScript禁用它后点击提交按钮,它似乎为我工作得很好,但我仍然得到双重提交飘飞。
有谁知道其他任何可能会导致表单提交两次?
正如Dagon所说,服务器端检查是你的朋友。为表单的每个实例提供一个随机生成的密钥(guid会很好),并将其存储在数据库中。不要接受包含db中已经存在的键的表单。
此外,您是否只是在表单处理逻辑执行后显示HTML?如果是这样,请在处理表单后尝试重定向。
前根据您的形式,而不是空过程只是检查一些细节和时间戳可能就足够了。如果'bob'在最后一分钟内支付了相同的金额,那么它是一个副本,或者如果之前已经使用了付款ID,或者 - 很难知道更多的数据。 – 2012-08-03 03:27:24
感谢大家,我想我只需要执行一个解决方案,而不会积极地解决问题的原因。我想如果不亲自看一个人重现它,没有办法找出原因。 – wyqydsyq 2012-08-03 03:33:19
是的。我敢打赌,如果你按下后退按钮,你可以重现它,但:-) – 2012-08-03 03:35:26
这是一个办法:后用户按下表单提交按钮,使用javascript禁用它。这应该防止用户意外双重提交表单。它适用于我们实现它的所有网站,如因为。因为有时候用户会不耐烦点击几次表单提交按钮,这就是为什么你会得到双重请求。你需要确保它适用于所有浏览器(禁用按钮我的意思)。
你也可以做到这一点在服务器端,它只是更难。
我们用类似于Enable/disable submit button with jQuery and Coldfusion server code
的upvoted答案后退按钮+重新提交? – 2012-08-03 03:15:49
重复提交之间的时间差是多少?用户有可能退回,然后重新提交。另外,什么用户代理? – 2012-08-03 03:16:07
可能是用户的问题,他们永远不会聪明:-)。你不能单靠JS,它可以被禁用,你需要一些服务器端检查。 – 2012-08-03 03:17:05