0

JSON から情報を取得して配列に挿入する関数があります。次に、関数が配列を返すようにします。

コードを次のように動作させたい:

user = getUserInfo();
console.log(user["fname"]);

function getUserInfo(){
    userArray = new Array();
    var url =  "./php/getUserInfo.php";

    $.getJSON(url, function( data ) {
        userArray["fname"] = data[0].first_name;
        userArray["lname"] = data[0].last_name;
        userArray["username"] = data[0].username;

        console.log(userArray["fname"]);
    });

    return userArray;
}

関数で userArray["fname"] の値をログに記録すると、完全に機能します。

関数が呼び出された後に userArray["fname"] の値をログに記録すると、「undefined」と表示されます

これはなぜですか?

4

3 に答える 3

1

コールバックの外で配列を返していgetJSONます。呼び出しは非同期であるため、従来の意味でデータを「返す」ことはできませんが、別のメソッドを呼び出して、作成後に配列を渡すことができます。

var user; // initialize global
getUserInfo();

function getUserInfo(){
    userArray = new Array();
    var url =  "./php/getUserInfo.php";

    $.getJSON(url, function( data ) {
        // set fields
        setUserInfo(userArray);
    });
}

function setUserInfo(userArray){
    user = userArray;
}

一連の呼び出しの後、配列userにベットが設定されます。userArray

于 2012-11-28T00:13:01.953 に答える
0

関数は、値が設定される前に配列を返しています。

于 2012-11-28T00:12:55.490 に答える
0

あなたが抱えている問題は、AJAX呼び出しgetJSON()が非同期的に発生することです(AJAXの最初のA)。

したがって、return userArrayAJAX 呼び出しに対するサーバーの応答を待っている間に発生します。

のコールバック関数内で、ユーザー情報でやりたいことは何でも処理する必要があります (つまり、ページ上の要素の更新、javascript のグローバル スコープ内の変数の更新など) getJSON

于 2012-11-28T00:15:16.847 に答える