我在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]);
答案 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");
}