方法一:
记录每一个请求的发起时间,然后每个请求回来后先判断当前展示在页面上的数据的发起时间,如果本次返回的结果的发起时间晚于当前显示的数据的发起时间,就替换,否则不替换。
function(){
var lastShowedResult = 0//当前显示的结果的请求时间,初始为0
$('input').keyup(function(){
var requestTime = +Date.now()//每次发请求时记录一下时间,转换成数字,注意在闭包里面
$.get(url, function(data){
if (requestTime > lastShowedResult) {//请求拿到后判断是否晚于当前正显示的内容的发起时间,如果是,则
lastShowedResult = requestTime//替换当前显示结果的发起时间
showResult(data)//替换页面上的内容
}
})
})
})()
方法二:
其实你想要的不是顺序执行,而是如果一个前面的请求返回的话,不要覆盖后面的请求。所以一个可行的方案应该是把请求和结果联系起来。
req1 -> res1
req2 -> res2
req3 -> res3
都存到一个array里面[{req:req1, res:res1},{req:req2, res:res2},{req:req3, res:res3}]这样子每次ajax返回的时候,第一步是更新这个包含了所有结果的array,第二步才是决定要不要修改DOM