【发布时间】:2013-08-17 09:43:42
【问题描述】:
我正在尝试在 javascript 中创建一个对象数组,但是当我尝试将数组打印到控制台(使用 chrome)时,我得到的只是未定义,除非我在推送之后打印数组。
var subitems = [];
for (var i = 1; i < 1000; i = i + 50) {
$.getJSON('http://gdata.youtube.com/feeds/api/users/' + username + '/subscriptions?max-results=50&start-index=' + i + '&alt=json', function (data) {
var output = "";
for (var x in data.feed.entry) {
var subtitle = data.feed.entry[x].yt$username.$t;
var subchannel = data.feed.entry[x].yt$channelId.$t;
var subphoto = data.feed.entry[x].media$thumbnail.url;
subitems.push({
subtitle: subtitle,
subchannel: subchannel,
subphoto: subphoto
});
console.log(subitems[0]); //Prints Fine
output += '<div class="subtitle"><img src="' + subphoto + '"> <a href="http://www.youtube.com/channel/' + subchannel + '">' + propercase(subtitle) + '</a></div>';
}
maincontent.innerHTML = maincontent.innerHTML + output;
});
}
console.log(subitems[0]); //This is undefined
【问题讨论】:
-
将 console.log 放入 getJSON 函数回调中。被调用的 Ajax 通常是异步运行的,因此可以在准备好时调用该函数,但是在运行该内部代码之前立即运行 getJSON 调用之后的代码。如果不这样做,它可以锁定页面/界面。
-
是否有可能因为 xhr 是异步的,所以在您记录它时(当它是 udefined 时)子项尚未设置?
-
另外,我会避免同时进行 那么 多个 Ajax 调用。
-
@HMR 是的,因为 XHR 是异步的
标签: javascript jquery arrays ajax object