如果页面上的表单当前正在提交,我有一个竞争条件,我不希望发生AJAX调用。有没有办法知道HTML表单当前正在提交?
我宁愿不改变表单的代码。
我正在考虑将事件处理程序附加到每个表单元素,以便onsubmit它会增加一个计数器,然后onreadystatechange递减计数器。
然后在AJAX调用之前,请检查以确保计数器在触发前为零。
但有更简单的方法,如(伪代码):
form.isSubmitting
编辑:
竞争状态,因为每说JavaScript的不是。这是由服务器端响应这些操作的顺序而发生的。
为了让您更广泛问题的一个想法:
设置cookie的形式后返回时。 在AJAX调用中(需要每隔X秒发生一次)...服务器端(如果表单发生了)期望cookie被设置。
有时....
如果在表单提交返回(并设置cookie客户端)的延迟,触发AJAX调用不发送的cookie回来。
服务器期望cookie,因为就其而言表单发布已成功。
但是,我需要控制客户端以确保按照规定的方式执行操作。
所以正确的JavaScript本身不会导致竞争条件,但(就我测试显示的那样) - 提交和返回POST/AJAX调用导致竞争条件在我的特定情况下。
没有的setInterval()允许多个线程同时运行? – Jez 2010-11-03 14:30:44
否 - 每次定时程序被调用时,它就像从一个按钮点击事件循环 - 它永远不会在任何种类的另一事件循环的中间发生 – Pointy 2010-11-03 14:43:53
现代“网络工作者”其实办法有多个线程,但他们从其他代码“防火墙”很好,所以你仍然不能有竞争条件 – Pointy 2010-11-03 14:44:32