Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将对象从JSON推送到数组_Javascript_Jquery_Json - Fatal编程技术网

Javascript 将对象从JSON推送到数组

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

我正在尝试获取3个不同的facebook提要,并将它们放在一个对象中。对象是item,它具有创建post的时间,以及来自JSON包的实际数据对象本身。当我记录items数组时,当我检查日志时,它只显示5个项目,但当我在日志中展开数组时,它显示我推送的所有15个项目。将项[0]调用为4是可行的,但之后它表示该项未定义。我不太确定我做错了什么,因为似乎所有的数据都在items数组中

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); 
    });
});

一份可能的副本