2016-09-28 75 views
0

我有一個數組,其中包含$ scope中的對象,其中包含angularjs。我成功地將對象推入數組中。它顯示數組是在控制檯中的形式,但我無法像在javascript中的普通數組一樣檢索數組的最後一個對象。以下是我的代碼。

$scope.messages = []; 

$http.get("http://localhost/php/retrieve_message.php").success(function (data) 
{ 
    for (i = 0; i < data.length; i++) 
    { 
     $scope.messages.push(data[i]); 
     console.log("success"); 
    } 
}).error(function() 
{ 
    console.log("error"); 
}); 
console.log([$scope.messages); console.log($scope.messages[$scope.messages.length - 1]); 
+2

'$ http'是異步方法。如果你使用'console.log',它會返回空或未定義。 – Davide

+0

但我用console.log($ scope.messages)控制檯;它顯示一個對象列表。現在的問題是我想獲取$ scope.messages數組中的最後一個對象 –

+0

這就像@Davide所說的 - 該方法是異步的,這意味着你不能在get方法之外console.log它並懷疑它已經完成了拉取數據從服務器那一刻開始。 –

回答

2

這是正確的。

$scope.messages = []; 

$http.get("http://localhost/php/retrieve_message.php").success(function(data) { 
    for (i = 0; i < data.length; i++) { 
     $scope.messages.push(data[i]); 
     console.log("success"); 
    } 
    console.log($scope.messages); 
    console.log($scope.messages[$scope.messages.length - 1]); 
}).error(function() { 
    console.log("error"); 

}); 
+0

謝謝,解決問題 –

+0

@chanyoonghon接受我的回答吧。 –

+0

但是如果我想在$ http之後的其他地方使用這個數組。我可以這樣做嗎? –

0

您正在製作Asynchronous request

在這種情況下,您會收到當數據被接收回調, 它可以讓瀏覽器繼續,而你的請求 被處理爲正常工作。

$scope.messages = []; 

    $http.get("http://localhost/php/retrieve_message.php").success(function(data){ 
     for(i=0; i<data.length; i++){ 
      $scope.messages.push(data[i]); 
      console.log("success"); 
     } 
    // put your code in success method 
    console.log($scope.messages); 
    console.log($scope.messages[$scope.messages.length - 1]); 

    }).error(function() { 
     console.log("error"); 
    }); 

在你的情況,你正在訪問的列表before the data has been received。 所以$ scope.messages的長度爲0和你試圖讓$scope.messages[-1]

您可以瞭解更多關於同步和異步請求 here

-1

嘗試更新您的for循環:

for(var x in data){ 
    $scope.messages.push(x); 
    console.log("success"); 
} 
0
$scope.messages = []; 

    $http.get("http://localhost/php/retrieve_message.php").success(function(data){ 
     // this callback function gets executed only after server returns a successful response. So, here you have access to data you have got from the server. 
     for(i=0; i<data.length; i++){ 
      $scope.messages.push(data[i]); 
      console.log("success"); 
     } 
     console.log([$scope.messages); 
     console.log($scope.messages[$scope.messages.length - 1]); 
    }).error(function() { 
     console.log("error"); 
    }); 
    // Following code executes before even server returns data. 
    //console.log([$scope.messages); 
    //console.log($scope.messages[$scope.messages.length - 1]); 
相關問題