【发布时间】:2013-07-23 20:08:17
【问题描述】:
我们正在使用 .net MVC 并有一个表单来提交电子邮件请求。一位用户在非常不稳定的互联网连接上(在飞机上)并声称尽管单击了一次发送按钮,但表单却发布了 6 次,导致发送了 6 封电子邮件。我一直在环顾四周,但无法找到解释这种行为的方法。有什么办法可以让已发布的表单由于连接不稳定而多次提交?
【问题讨论】:
标签: .net post form-submit
我们正在使用 .net MVC 并有一个表单来提交电子邮件请求。一位用户在非常不稳定的互联网连接上(在飞机上)并声称尽管单击了一次发送按钮,但表单却发布了 6 次,导致发送了 6 封电子邮件。我一直在环顾四周,但无法找到解释这种行为的方法。有什么办法可以让已发布的表单由于连接不稳定而多次提交?
【问题讨论】:
标签: .net post form-submit
这实际上取决于实际的浏览器,但我还没有看到有人这样做(事实上,这样做会很危险,例如在某些在线订购服务的情况下)。
但是,这样的事情很容易偶然发生。有时人们并没有意识到多次点击,因为他们没有注意到第一次点击会触发任何事情。浏览器可能不会立即显示任何加载操作/活动,尤其是在连接不稳定的情况下。此外,由于某些硬件问题(鼠标按钮损坏),尽管只单击了一次,但也可能执行了多次单击。
为了确定,我只需在表单中添加一些最小的 JavaScript 代码:在提交时,禁用提交按钮并避免进一步尝试发送表单(拦截 onsubmit 事件并返回 true第一次;从那以后总是返回false)。
【讨论】:
我知道我回答迟了,但我遇到了类似的问题,我相信问题出在浏览器上。我们使用 AJAX 向控制器提交表单数据,由于要处理的数据很大,因此处理需要很长时间。像 Chrome 这样的浏览器,等待一段时间,如果他们没有收到响应,则假设请求丢失并自行发送另一个请求,这很可能是您的情况。请注意,同样的问题不会发生在像这样的浏览器中Firefox 和 IE。
我们为避免这种情况所做的就是让该方法异步工作,并在该时间间隔内将响应返回给 AJAX 方法,以避免 Chrome 再次发出请求。
这个link 详细解释了相同的问题。
【讨论】: