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("
"); 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;

⋯⋯
⋯⋯
⋯⋯

    }
});

)

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

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

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