在输出数据之前,等待循环完成每个数组项的 $.getJSON
Wait for loop to finish $.getJSON for each array item before outputting data
我有一个需要从中检索数据的名称数组,我目前正在循环中使用$.getJSON执行此操作。它可以工作,我可以检索数据,但要输出正确的值,我需要使用 setTimeout 或类似的东西。我想知道是否有一种更精致的方式来完成我想要实现的目标。
这就是我得到的。
var names = ["riotgames", "example"];
var online = [];
for (var i = 0; i < names.length; i++) {
$.getJSON('https://api.twitch.tv/kraken/streams/' + names[i], function(data) {
if (data.stream != null) {
online.push(data.stream.channel.display_name);
};
});
}
console.log(online) // outputs []
setTimeout(function() {
console.log(online) // outputs correctly
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
执行$.getJSON
时,您正在触发异步请求。 这意味着它们在后台运行。 您不必等待它们完成,一旦请求完成,它们的回调将触发(如事件(。
这意味着您无法从回调外部访问online
。
如果你想"等待">所有请求完成,那么我建议使用承诺。 您可以使用$.when
将所有请求合并到一个承诺中,然后在所有操作完成后运行回调。
var names = ["riotgames", "example"];
var promises = [];
for (var i = 0; i < names.length; i++) {
// $.getJSON returns a promise
promises.push($.getJSON('https://api.twitch.tv/kraken/streams/' + names[i]));
}
// Combine all promises
// and run a callback
$.when.apply($, promises).then(function(){
var online = [];
// This callback will be passed the result of each AJAX call as a parameter
for(var i = 0; i < arguments.length; i++){
// arguments[i][0] is needed because each argument
// is an array of 3 elements.
// The data, the status, and the jqXHR object
online.push(arguments[i][0].stream.channel.display_name);
}
console.log(online);
});
相关文章:
- 如何加速getJSON数组数据
- 使来自 GetJson 数组的循环数据成为链接
- jQuery $.getJSON : 将数组传递给 PHP
- 从Jquery$.getJSON方法获取数组的全局数组到REUSE数组
- $.getJSON可以't解析数组
- 如何从$.getJSON调用中以print_r()方式打印关联数组
- getJSON从这个json数组中获取数据
- 如何使用getJSON将javascript关联数组传递到php文件
- 使用$.when()和.then基于$.getJSON响应更新数组
- 美元.getJSON数组值Javascript
- 如何在getjson调用结束时显示数组内容
- getJSON不允许数组通过
- 不能访问$中的全局数组.getJSON函数
- 如何在jquery中返回一个索引数组对象到getJSON请求
- 在$.getJSON异常之后对JSON数组进行排序
- 使用$.getJSON检索JSON数组并返回值
- 如何使用getJSON从文件中获取JSON数组
- 如何在数组上调用.getJSON
- jQuery:调用 $.getJSON 时填充数组时出现问题
- getJSON 请求循环遍历参数数组,每次调用之间都有延迟