我尝试从json文件中获取ajax返回的记录数,但是当我尝试打印数字时," .success块"之外的记录。我没有得到" .success块内退出的价值"
实施例:
var total = 0;
$http.get("json/noticias.json")
.success(function(response) {
$scope.lista = response;
total = response.noticias.length;
alert(total);//Print 3
});
alert(total);//Print 0
我还需要在第二张中打印3。
答案 0 :(得分:1)
那是因为$http.get()
是异步调用,这意味着执行流不会停止$http.get()
获取所有值并执行.success()
函数内的逻辑然后移动到下一系列事件。
当$http()
调用获取数据并调用.success()
时,执行流继续并执行下一个语句。因此,您首先在alert()
中获得0,然后是3.因此,当执行alert()
外$http()
调用时,total
的值仍为0
} total
尚未在.success()
回调中更新。
您应该使用promises和$ q来处理$http
调用的成功和错误条件。
答案 1 :(得分:0)
您需要将长度分配给作用域的total
属性,然后您可以在success方法之外访问它并将其绑定到您的html元素。但请注意,一旦响应可用,您将能够访问total
的更新值。以下内容可以解决您的问题:
$scope.total = 0;
$http.get("json/noticias.json")
.success(function(response) {
$scope.lista = response;
$scope.total = response.noticias.length;
alert($scope.total);//Print 3
});
alert($scope.total);//Print 0
答案 2 :(得分:0)
AngularJS使用名为$ q的promise模块。所以你必须使用then()或catch() 这将在成功后获得json数据
var total = 0;
$http.get("json/noticias.json") .success(function(response) {
$scope.lista = response;
response.total = response.noticias.length; ;
alert(total);//Print 3
}).then(
function( response ) {
alert(response.total); //print 3
});
我希望这个帮助