jQuery怎么检测$.get读取接口的数据是否缓存完,缓存完再执行下一条指令怎么做?
高洛峰
高洛峰 2016-11-12 09:50:22
0
2
702

怎么检测$.get是否获取完信息,再执行下一步

jQuery怎么检测$.get读取接口的数据是否缓存完,缓存完再执行下一条指令怎么做?

我想做个打票机系统,他是连接自己写的接口方法,先获取订单后再把订单截去分隔符,再循环给下一个$.get方法有多少条订单就循环多少个$.get方法来获取详细订单信息。

问题在于,他由于没有返回完全部订单号就执行了下列方法,查询详细订单信息顺序就错乱了,有什么办法检测他是否完全返回所有信息再执行下一条?

function load() {
    alert('查询成功');
    $("#table1_2_3").append("<table id='table' style='font-size:14px;margin:0 auto;'></table>");
    var stime = document.getElementById("stime").value;
    var etime = document.getElementById("etime").value;
    var rid = document.getElementById("rid").value;
    var tag = document.getElementById("tag").value;
    $.get({
      type: "GET",
      url: "这是接口",
      dataType: "text",
      success: function(data) {
        data = data.substr(2, data.length - 2);
        data = data.substr(0, data.length - 2);
        var data = data.split('|*');
        var dArr = new Array;
        //查询订单号
        for (var i = 0; i < data.length; i++) {
          dArr[i] = data[i];
        }
        console.log(i);
        //查询订单详细信息
        for(var j = 0; j < dArr.length; j++){
          var dingdanhao = dArr[j];
          $.get({
            type: "get",
            url: "这是接口",
            success: function(data1) {
              var result = data1.split('|*');
              for(var k = 0; k < result.length; k++){

              }
              console.log(data1);
            }
          },{id: dingdanhao,tag: "0"});
        }
      }
    },{stime: stime,etime: etime,rid: rid,tag: tag,});
  };


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(2)
学霸

var lock = false;if(lock==false)(

lock = true;
$.get("demo_test.html",function(data,status){
    if(status == 'success'){
        lock = false;

⋯⋯
⋯⋯
⋯⋯

   }
});

)

手机写的,希望你能看懂吧


三叔

针对此需求,你有3种解决方案:

使用ajax的「同步」模式

$.ajax({
    url: 'url1'
    async: false,
});
$.ajax({
    url: 'url2'
    async: false,
});

这绝对是按照先后顺序执行的

使用jQuery的Deferred对象

比如必须等待3个ajax请求完毕,才能执行下一个步骤

jQuery.when(
    $.ajax({
        url: 'url1'
    }),
    $.ajax({
        url: 'url2'
    }),
    $.ajax({
        url: 'url3'
    })
).done(function(data1, data2, data3){
    全部请求完毕了,
});

当然了,大部分都是循环来弄的,于是我们可以这样

var ajaxs = [];
for(var i = 0; i 

使用邪恶金字塔(Pyramid of Doom)

var urls = [
    'url1',
    'url2',
    'url3'
], datas = [];
var currentIndex = -1;
var successCallback = function(data) {
    if (data !== false) datas.push(data);
    if (++currentIndex >= urls.length) //已经循环完毕
    {
        // 已经做完了, 需要接下来干嘛?
        // datas
        return false;
    }
    
    $.ajax({
        url: urls[currentIndex],
        success: successCallback,
    });
}
//第一次时 手动调用
successCallback(false);

看你哪个能理解就用哪个吧,以上代码都是伪代码,需要自己修改后运行

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template