一般我们用ajax实现的autocomplete系统,随着用户的输入我们向后端发出去的请求依次应该是
autocomplete?q=j autocomplete?q=java autocomplete?q=javasc
如果遇到网络延时比较严重,当我们处理完q=javasc
的请求后,q=j
的请求才返回过来,那么如果不做任何处理这个时候就会显示q=j
的结果,显然这是不合理的,大家一般是怎么处理这种问题的呢?
有人可能会想,用延时触发,其实这根本不能解决问题,延时触发只能减少请求的频率,但是如果你请求返回的时间超过了延时的时间,照样会产生错乱.
其实方法很简单:终止前一个请求并删除此请求:
这样做还有两个优点:
java
打出来,其实j
,ja
,jav
的请求都不需要了),我是这么处理的,首先你肯定是要记录每次输入的事件,每次输入之后放入到一个数组中,如
实际上就是只处理最后输入的那个关键词的ajax回调函数逻辑,实现可能不太优雅呵呵
以前我也想过这个问题
简单的方法就用一个数组来保持执行顺序,如果是需要执行的时候就执行,否则插入到对应顺序的位置,等待前一个回调执行完成。搞个队列吧