我试图用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
这是这样做的“简便”方法:计算XHR请求并在所有请求返回后触发完成函数:
var xhrCount = 0;
for (var i = 1; i < 1000; i = i + 50) {
xhrCount++; // increment before request
$.getJSON('http://gdata.youtube.com/feeds/api/users/' + username + '/subscriptions?max-results=50&start-index=' + i + '&alt=json', function (data) {
// process response
// decrement after request is processed
xhrCount--;
if (xhrCount === 0) {
// at this point all requests have returned
console.log(subitems);
}
}
}
}
更新:一种更好的方法是利用jQuery.Deferred()
对象。这里设置了一个快速演示,需要一些修复。总体思路是跟踪您提出的所有AJAX请求,将其传递给,deferred.when()
并使用分配完成的功能deferred.done()
。代码(为便于阅读而精简):
var subitems = [];
var deferreds = [];
for (var i = 1; i < 1000; i = i + 50) {
var deferred = $.getJSON('https://gdata.youtube.com/feeds/api/users/warnerbrospictures/uploads?max-results=50&start-index=' + i + '&alt=json', function (data) {
for (var j = 0; j < data.feed.entry.length; j++) {
subitems.push({
title: data.feed.entry[j].title.$t
});
}
});
deferreds.push(deferred);
}
$.when.apply($, deferreds).done(function () {
console.clear();
console.log(subitems);
for (var i = 0; i < subitems.length; i++) {
console.log(subitems[i].title);
}
});
注意:Google数据供稿包含结果总数,因此可以消除硬编码的“ 1000”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句