2015-04-07 2 views
1

Я пытаюсь изучить Angular и написал следующий код, чтобы найти свой IP-адрес. Я могу легко получить доступ и распечатать IP-адрес на консоли внутри SUCCESS, но не получить доступ к нему за пределами метода GET. Даже установка переменной для ответа внутри SUCCESS не выполняет работу. Любая помощь будет высоко оценен.Угловой: доступ к ответу на успех

 var app = angular.module('myApp', []); 

     var ip; 

     app.controller('customersCtrl', function($scope, $http) { 
      console.log("Console Works"); 


      $http.get("https://api.ipify.org/") 
      .success(function (response) { 
       console.log("Success " + response); 
       ip = response; 
       console.log("IP Inside: " + ip); 
      }); 
     }); 
     console.log("IP Outside: " + ip); 

Консольные напечатает:

IP Снаружи: неопределенными

Консольные Работы

Успех 11.222.222.11

IP Внутри: 11.222.222.11

+0

возможно дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-to-return- a-response-from-a-асинхронный вызов) –

ответ

0

его потому, что Javas Крип асинхронен. Таким образом, console.log("IP Outside: " + ip); вызывается перед успешным ответом. Поэтому, если вы хотите выполнить некоторую задачу на IP, сделайте это с помощью метода success.

1

Это то, что мы назвали асинхронным миром.

$ http.get отправить асинхронный вызов и ожидание обратного вызова (успех или ошибка) вашего обещания statement console.log («IP Inside:» + ip); снаружи уже выполнено, но все же у вас нет никакой ценности.

Вы можете получить доступ к varable снаружи, как

 var app = angular.module('myApp', []); 

      var ip; 

      app.controller('customersCtrl', function($scope, $http) { 
       console.log("Console Works"); 
       $scope.ip=""; 

       $http.get("https://api.ipify.org/") 
       .success(function (response) { 
        console.log("Success " + response); 
        $scope.ip = response; 
        console.log("IP Inside: " + $scope.ip); 
       }); 
      }); 
     $scope.$watch('ip',funciton(newVal){ 
       console.log(newVal); // It is new value of your IP 
      ip=newVal; 
     }); 
+0

С приведенным выше кодом я получаю $ scope не указан в строке 3 $ scope.ip = ""; – JungleJeem

+0

Привет, я обновил свой ответ :) – squiroid

+0

Спасибо за быстрый ответ. Мне все еще не удалось заставить ваш код работать. $ scope. $ watch ('ip', funciton (newVal) {==> Неожиданный токен { – JungleJeem

Смежные вопросы