Angular Ajax临时变量

时间:2015-07-05 17:19:18

标签: javascript arrays ajax json angularjs

我尝试从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。

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 
}); 

我希望这个帮助