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

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

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

posted @ 2019-05-11 16:38  princeness  阅读(312)  评论(0编辑  收藏  举报