从函数返回一个assoc数组是Undefined

时间:2012-11-28 00:10:13

标签: php javascript jquery json

我有一个从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”]的值时,我得到了 “未定义”

为什么会这样?

3 个答案:

答案 0 :(得分: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数组。

答案 1 :(得分:0)

您的函数在设置其值之前返回Array。

答案 2 :(得分:0)

您遇到的问题是像getJSON()这样的AJAX调用是异步发生的(AJAX中的第一个A)。

因此,当您还在等待服务器响应您的AJAX调用时,return userArray将会发生。

您需要在getJSON的回调函数中处理您想要处理的用户信息(即更新页面上的某些元素,更新javascript全局范围内的变量等)。