2016-09-28 52 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]); 
相关问题