现代浏览器中的表单帖子行为有变化吗?(或浏览器如何处理双击)

Ale*_*rto 12 html browser error-handling postback double-click

背景:我们正在编写注册/支付页面,我们的理念是首先在服务器端编写所有验证和错误检查,然后添加客户端验证作为第二步(非阻塞性jQuery).

我们想要禁用双击服务器端,因此我们编写了一些锁定的,线程安全的代码来处理同时发布/竞争条件.当我们试图测试这个时,我们意识到我们不能同时发生后期或竞争条件.

我认为(无论如何在旧浏览器中)双击提交按钮的工作原理如下:

  • 用户双击提交按钮.
  • 浏览器在第一次点击时发送帖子
  • 在第二次单击时,浏览器取消/忽略初始帖子,并启动第二个帖子(在第一个帖子返回响应之前).
  • 浏览器等待第二个帖子返回,忽略初始帖子响应.

我认为从服务器端看起来像这样:服务器获得两个同时发布的请求,执行并响应它们两者(不知道没有人正在收听第一个响应).

从我们的测试(FireFox 3.0,IE 8.0),这是实际发生的事情:

  • 用户双击提交按钮
  • 浏览器发送第一次点击的帖子
  • 浏览器排队第二次单击,但等待第一次单击时的响应.
  • 响应从第一次单击返回(响应被忽略?).
  • 浏览器发送第二次点击的帖子.

因此,从服务器端:服务器接收它执行并响应的单个帖子.然后,服务器接收它执行并响应的第二个请求.

我的问题是,这总是以这种方式工作(而我正在失去理智)?或者这是现代浏览器中的一项新功能,可防止将同时发送到服务器?

似乎对于服务器端双击预防,我们不必担心同时发布的帖子或竞争条件.只需要担心排队的帖子.

提前感谢任何反馈/意见.

亚历克斯

Del*_*ani 0

只要请求处于连接或发送阶段,在第一次提交期间单击“提交”就会取消该请求,并在服务器“不知情”的情况下启动一个新请求。