JavaScript对象数组-未定义但不为空

时间:2018-08-14 20:47:45

标签: javascript

我已经创建了一个对象数组“ postsList”,其中包含了我可以登录控制台的信息。

var postsList = [];
var postsCollection = new wp.api.collections.Posts();
postsCollection.fetch({
    data: {
         per_page: 20
    }
}).done(function( posts ) {
    postsCollection.each( function( post ){
        //console.log( post.attributes );
        postTitle = post.attributes.title.rendered;
        postID = post.attributes.id;
        postsList.push({
            id: postID,
            title: postTitle
        });
    });
});
console.log(postsList); // this works
console.log(postsList[0].id); // this doesn't work - Undefined

但是,当我尝试访问它的各个部分时,我的控制台说它是未定义的。

您能帮助我了解我在做什么吗?这是我的console.log输出,内容为“ console.log(postsList);”:

[]
0:
    id: 306
    title: "Another Post"
    __proto__: Object
1:
    id: 1
    title: "Hello world!"
    __proto__: Object
length: 2
__proto__: Array(0)

1 个答案:

答案 0 :(得分:1)

您应该将数据记录在done回调中。 AJAX中的“ A”代表异步,这意味着其余代码将在不等待AJAX​​调用完成的情况下执行。对于您而言,您正在尝试在AJAX调用完成之前记录数据。

var postsList = [];
var postsCollection = new wp.api.collections.Posts();
postsCollection.fetch({
    data: {
         per_page: 20
    }
}).done(function( posts ) {
    postsCollection.each( function( post ){
        //console.log( post.attributes );
        postTitle = post.attributes.title.rendered;
        postID = post.attributes.id;
        postsList.push({
            id: postID,
            title: postTitle
        });
        console.log(postsList);
        console.log(postsList[0].id);
    });
});