-1

我正在使用这段代码来检索一个简单的 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" 时,它们出现为未定义。我无法弄清楚为什么会这样,或者我可以做些什么来检索属性而不必遍历它们。

有什么建议么?

4

3 回答 3

4

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

尝试这个:

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
}
于 2013-01-01T03:45:01.280 回答
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.
于 2013-01-01T03:54:55.173 回答
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);

完美运行。

于 2013-01-01T04:35:16.233 回答