-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 に答える