2012-11-28 44 views
0

我有一個從JSON獲取信息然後將其插入到數組中的函數。 然後我讓該函數返回數組。從函數返回assoc數組未定義

我想要的代碼,像這樣的工作:

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」]的函數被調用後,我得到 「未定義」

爲什麼會這樣呢?

回答

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陣列。

0

您的函數在設置其值之前返回數組。

0

您遇到的問題是AJAX調用如getJSON()異步發生(AJAX中的第一個A)。

因此,return userArray會發生,而你仍然在等待服務器響應你的AJAX呼叫。

您需要在getJSON的回調函數中處理您想要對用戶信息進行的任何操作(即更新頁面上的某個元素,更新javascript全局範圍中的變量等)。