javascript - jQuery怎么检测$.get读取接口的数据是否缓存完,缓存完再执行下一条指令怎么做?
PHPz
PHPz 2017-04-10 17:58:57
[JavaScript讨论组]

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

学习是最好的投资!

全部回复(2)
伊谢尔伦

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

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

天蓬老师

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

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

⋯⋯
⋯⋯
⋯⋯

    }
});

)

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号