2015-04-07 66 views
1

我正在尝试学习Angular并编写了下面的代码来查找我的IP。我可以轻松地访问并将IP打印到SUCCESS内部的控制台,但无法在GET方法之外访问它。即使在SUCCESS中设置变量来响应也没有工作。任何帮助将不胜感激。Angular:访问成功响应

 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-异步调用响应) –

回答

0

其因Java类cript是异步的。所以console.log("IP Outside: " + ip);在成功响应之前被调用。所以如果你想在IP上执行一些任务,那么成功的方法就是这样。

1

这就是我们所说的异步世界。

$ http.get发送异步调用并等待您的承诺的回调(成功或错误)语句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