Ajax回调按发起请求的顺序执行?

mac2026-03-09  5

方法一: 记录每一个请求的发起时间,然后每个请求回来后先判断当前展示在页面上的数据的发起时间,如果本次返回的结果的发起时间晚于当前显示的数据的发起时间,就替换,否则不替换。

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

最新回复(0)