角度Ajax时间变量

Angular Ajax temporaly variables

本文关键字:变量 时间 Ajax 角度      更新时间:2023-09-26

我正在尝试从json文件中获取ajax返回的记录数,但当我尝试打印".success block"外的记录数时,我没有获得".suc成功block"内的值

示例:

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。

这是因为$http.get()是一个异步调用,这意味着执行流不会停止,让$http.get()获取所有值并执行.success()函数内的逻辑,然后转移到下一个事件序列。

执行流继续,在$http()调用获取数据并调用.success()的同时执行下一个语句。因此,在alert()中首先得到0,然后得到3。因此,在执行$http()调用之外的alert()时,由于total尚未在.success()回调中更新,因此total的值仍然是0

您应该使用promise和$q来处理$http调用的成功和错误条件。

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

我希望这能帮助

您需要将长度分配给作用域的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