Rumah > Soal Jawab > teks badan
怎么检测$.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,}); };
欧阳克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;
⋯⋯
⋯⋯
⋯⋯
} });
)
手机写的,希望你能看懂吧
三叔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);
看你哪个能理解就用哪个吧,以上代码都是伪代码,需要自己修改后运行