无法检索Angularjs $ scope数组最后一个对象

时间:2016-09-28 07:27:03

标签: javascript angularjs arrays object

我在angularjs中有$ scope范围内的对象数组。我成功地将对象推入数组。它显示数组是在控制台中的形式,但我无法在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]);

4 个答案:

答案 0 :(得分: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");

});

答案 1 :(得分: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

答案 2 :(得分: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]);

答案 3 :(得分:-1)

尝试将for循环更新为:

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