首页 > 开发 > JS > 正文

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

2017-09-05 12:35:19  来源:网友分享

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

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

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

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

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,});  };

解决方案

针对此需求,你有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);

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