2015-07-05 1 views
-1

Я пытаюсь получить количество записей, возвращаемых ajax из json-файла, но когда я пытаюсь напечатать число записей за пределами «.success block», я не получаю значение который выходит внутри ".success блока"Angular Ajax temporaly variables

Пример:

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 во втором также.

+1

которых один печатает первую 0 или 3? Думаю, да? –

+0

Каково ваше требование? –

ответ

0

AngularJS использует модуль обещаний под названием $ q. Таким образом, вы должны использовать то() или поймать() Это позволит получить данные 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 
}); 

Я надеюсь, что эта помощь

1

Это потому, что $http.get() асинхронный вызов, который означает, что поток выполнения не останавливается на $http.get(), чтобы извлечь все значения и выполнить логику внутри .success() функции, а затем перейти к следующей последовательности событий.

Выполняется поток выполнения, и следующие операторы выполняются, когда вызов $http() извлекает данные и вызывается .success(). Таким образом, вы получаете 0 в alert() первом, а затем 3. Таким образом, в то время, когда alert() вне $http() вызова выполняются, то значение total еще 0, как total еще не были обновлены в .success() обратного вызова.

Вы должны использовать обещания и $ q для управления успехами и условиями ошибки $http.

+0

Хорошо спасибо, я попробую ваше решение, хотя у меня уже есть цель, работающая внутри .success() – JECR9421

0

Вам необходимо назначить длину свойства total области действия, затем вы можете получить доступ к ней за пределами метода успеха и привязать его к элементу 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