为了账号安全,请及时绑定邮箱和手机立即绑定

怎样解决ajax请求返回的时序问题

怎样解决ajax请求返回的时序问题

jeck猫 2019-03-29 10:58:34
一般我们用ajax实现的autocomplete系统,随着用户的输入我们向后端发出去的请求依次应该是autocomplete?q=jautocomplete?q=javaautocomplete?q=javasc如果遇到网络延时比较严重,当我们处理完q=javasc的请求后,q=j的请求才返回过来,那么如果不做任何处理这个时候就会显示q=j的结果,显然这是不合理的,大家一般是怎么处理这种问题的呢?有人可能会想,用延时触发,其实这根本不能解决问题,延时触发只能减少请求的频率,但是如果你请求返回的时间超过了延时的时间,照样会产生错乱.
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

其实方法很简单:终止前一个请求并删除此请求://whenkeyup
if(lastXhr){
lastXhr.abort();
deletelastXhr;
}
...这样做还有两个优点:可以防止打字太快导致浪费许多请求(比如用户很快把java打出来,其实j,ja,jav的请求都不需要了),可以防止因为突然间收到很多提示结果导致提示框乱闪
                            
查看完整回答
反对 回复 2019-03-29
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

目前大多自动完成是通过用户输入来延迟查询频率的,每次请求可以加上loading状态,让用户知道自动完成在处理请求.在请求里加上时间戳,以比较返回时间是否超出预期,如果超出预期且当前词与请求里的词不一致则忽略掉返回结果.最好的办法是换个速度快点的服务器,优化服务端处理时间,快速完成用户的请求.
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 475 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号