如何从对象获取属性

时间:2013-01-01 03:40:19

标签: javascript jquery object

我正在使用此代码检索一个简单的JSON对象:

function userinfo() {
    var user = new Object();
    $.getJSON('###', function(data){
        user.id = data.user.uID;
        user.name = data.user.uname;
    });
    return user;
}
var user = userinfo();
console.log(user);

当我在函数外部的用户对象上运行console.log时,我可以看到对象的属性(id,name)。但是当我尝试使用console.log“user.id”或“user.name”时,它们会显示为未定义。我无法弄清楚为什么会这样,或者我可以做什么来检索属性而不必迭代它们。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

获取JSON的AJAX调用是异步的,在AJAX返回之前不会调用回调function(data),但是在发送AJAX请求之后,但在AJAX之前,您正在读取user收到回复。

试试这个:

function userinfo() {    
    $.getJSON('###', function(data){
        var user = new Object();
        user.id = data.user.uID;
        user.name = data.user.uname;
        // Do your stuff here
        console.log(user);
    });
}

userinfo();

回答评论: 只需在应用程序上有这样的功能:

function processUser(user){
   console.log(user);
}

然后在AJAX回调中使用它,

$.getJSON('###', function(data){
        var user = new Object();
        user.id = data.user.uID;
        user.name = data.user.uname;
        // Do your stuff here
        processUser(user);
    });

@Simon,您现在可以在processUser()中执行常规应用程序逻辑,例如:

var usersList = []; // Assume this is a global for your app

function processUser(user){
   usersList.push(user);
   // now other parts of your app can find this user in the list
}

答案 1 :(得分:1)

function userinfo(callback) {
    $.getJSON('###', function(data){
        callback({
            id: data.user.uId,
            name: data.user.uname
        });
    });
}
var user;
userinfo(function(newUser) {
    user = newUser;
    // do work with user.
});

// execution continues here before callback returns.  User will not be set.

user.name // error no property name of undefined.

答案 2 :(得分:0)

以下是修复:

function userinfo() {
    var user = new Object();
    $.ajax({
        async: false, //solution right here
        url: '/login/user.html',
        success: function (data) {
            user.id = data.user.uID;
            user.name = data.user.uname;
        }
    });
    return user;
}
var user = userinfo();
console.log(user.id);

完美无缺。