搜索

首页  >  问答  >  正文

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

怎么检测$.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,});
  };


高洛峰高洛峰2941 天前709

全部回复(2)我来回复

  • 欧阳克

    欧阳克2016-11-12 09:52:51

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

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

    ⋯⋯
    ⋯⋯
    ⋯⋯

       }
    });

    )

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


    回复
    0
  • 三叔

    三叔2016-11-12 09:51:37

    针对此需求,你有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 < 10;i++)
        ajaxs.push($.ajax({url: ....}));
        
    jQuery.when.apply(this, ajaxs).done(function(){
        var args = arguments;
        //args是所有得到的data
    
    });

    使用邪恶金字塔(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);

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

    回复
    0
  • 取消回复