javascript - 为什么一个含有3个对象元素的数组只能访问第一个元素?
本文介绍了javascript - 为什么一个含有3个对象元素的数组只能访问第一个元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
status展开里面有三个元素
然后status[0]
是我push进去的对象元素
然后status[1]
和status[2]
就是各种undefined,为什么?
下面是完整代码,试了几遍,觉得跟变量作用域有关系,但是数组变量result是在最外层的啊,在里面push()为什么外面取不到?
function getStreamsStatus(channels) {
var results = [];
$.each(channels, function(index, channel) {
var result = [];
// result.push({ name: channel });
$.getJSON (
"https://api.twitch.tv/kraken/streams/" + channel,
{
Accept: "application/vnd.twitchtv.v5+json",
client_id: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
callback: ""
},
function(data) {
result.push(data);
$.getJSON(
data._links.channel,
{
Accept: "application/vnd.twitchtv.v5+json",
client_id: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
callback: ""
},
function(channel_data) {
result.push(channel_data);
// console.log(result);
// console.log(result[0]);
// console.log(result[1]);
});
console.log(result);
console.log(result[0]);
console.log(result[1]);
});
results.push(result);
// console.log(result);
// console.log(result[0]);
// console.log(result[1]);
});
return results;
}
解决方案
Ajax是异步过程,回调函数是在数据取回之后才执行的操作
而你的results.push(result),在数据没有取回的时候应该已经push进去了
所以你查看的时候是还没push进去数据的数组,
要等数据加载完你再console才能看得到数据
前面的Ajax嵌套也是同理
这篇关于javascript - 为什么一个含有3个对象元素的数组只能访问第一个元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文