提问者:小点点

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

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

你能帮我理解我做错了什么吗?这是我的控制台. log输出,带有“控制台.log(postsList);”:

[]
0:
    id: 306
    title: "Another Post"
    __proto__: Object
1:
    id: 1
    title: "Hello world!"
    __proto__: Object
length: 2
__proto__: Array(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);
    });
});