实际上我现在在做的表单使用的是EXT,不过一般的表单应该也有这样的问题。
以上面的表单为例,我在输入产品名称后,直接点击查询按钮,此时会触发blur事件,同时执行表单的submit,这2个步骤是异步的,假设blur事件执行的事情比较多,甚至发送一个同步请求(ajax请求几乎都会出现问题,不考虑),这里可能就会出现2种结果,描述如下:
如果步骤的执行顺序是1,2,3,那么此时查询的结果是正确的
如果步骤的执行顺序是1,3,2,那么此时的查询结果就不是正确的了。
所以这里如果改成异步请求,那么一般的执行顺序是1,3,2出错的几率就很大。
请问这种情况,怎么保证执行顺序呢?类似的场景应该是很多的,欢迎讨论!
你只考虑异步没考虑逻辑的正确性,就像你自己说的,那边在异步,这边出结果肯定不对的。
所以业务逻辑的先后顺序要先明确再考虑使用同步或是异步处理机制,否则得不偿失,不如一步一步来的好
所以想知道一般是怎么处理的?用户的习惯是直接点击“查询”按钮的,他可不管你有没有发请求。
那对你button,你不用type=‘submit’ 可以考虑用type='button' 然后开个定时器,不停的检测一个变量,当这个变量为true的是你提交你的表单($("#form1").submit()) 这个变量本身是false的,你可以在blur事件做完以后设置为true
你的blur事件应该是textbox的吧?
谢谢,之前确实使用了这种方式去处理,想看看有没有其他想法,比如利用浏览器的事件原理来处理。
其实这样也没根本解决问题,如果用户两次触发了blur呢。
就是说第一次输入完了 鼠标移走了,但是没点击提交按钮,过会再输入一次,没等第二次ajax响应完成,他点击了提交你咋办。
在focus时候设置个false,貌似凑合能用
@js明哥哥: 那你可以设置在点击了查询以后再设置那个变量为true