Javascript 将对象从JSON推送到数组
我正在尝试获取3个不同的facebook提要,并将它们放在一个对象中。对象是item,它具有创建post的时间,以及来自JSON包的实际数据对象本身。当我记录items数组时,当我检查日志时,它只显示5个项目,但当我在日志中展开数组时,它显示我推送的所有15个项目。将项[0]调用为4是可行的,但之后它表示该项未定义。我不太确定我做错了什么,因为似乎所有的数据都在items数组中Javascript 将对象从JSON推送到数组,javascript,jquery,json,Javascript,Jquery,Json,我正在尝试获取3个不同的facebook提要,并将它们放在一个对象中。对象是item,它具有创建post的时间,以及来自JSON包的实际数据对象本身。当我记录items数组时,当我检查日志时,它只显示5个项目,但当我在日志中展开数组时,它显示我推送的所有15个项目。将项[0]调用为4是可行的,但之后它表示该项未定义。我不太确定我做错了什么,因为似乎所有的数据都在items数组中 function item(time, obj) { this.time = time; this.o
function item(time, obj)
{
this.time = time;
this.obj = obj;
}
$(document).ready(function() {
var items = [];
$.getJSON("http://feed1", function(obj) {
$.each( obj.data, function( key, val ) {
items.push(new item(val.created_time,val));
});
});
$.getJSON("http://feed2", function(obj) {
$.each( obj.data, function( key, val ) {
items.push(new item(val.created_time,val));
});
});
$.getJSON("http://feed3", function(obj) {
$.each( obj.data, function( key, val ) {
items.push(new item(val.created_time,val));
});
console.log(items); // shows 5 items, but expanded, shows 15 while inspecting
console.log(items[0].time); // Works
console.log(items[5].time); // Fails
});
console.log(items); // shows an empty items array
});
Ajax是异步的,所以当您执行console.log语句时,可能并非所有调用都已完成。解决您问题的一个简单方法是获得每个请求的承诺,然后等待所有请求完成:
$(document).ready(function () {
var items = [];
var feed1 = $.getJSON("http://feed1", function (obj) {
$.each(obj.data, function (key, val) {
items.push(new item(val.created_time, val));
});
});
var feed2 = $.getJSON("http://feed2", function (obj) {
$.each(obj.data, function (key, val) {
items.push(new item(val.created_time, val));
});
});
var feed3 = $.getJSON("http://feed3", function (obj) {
$.each(obj.data, function (key, val) {
items.push(new item(val.created_time, val));
});
});
$.when(feed1, feed2, feed3).done(function() {
console.log(items);
});
});
一份可能的副本