如何访问angularjs中$ http.get方法的.success里面的url

时间:2015-05-28 12:18:44

标签: javascript ajax angularjs angularjs-scope

我有以下控制器

var app = angular.module('callapp', []);
app.controller('eController', function($scope, $http, $log) {
    $scope.urlString = []; //this is filled with values

    for( var i=0; i<3; ++i)
    {
        var currentURL = $scope.urlString[i];
        $http.get(currentURL)
        .success( function(response) {
            //how do I access currentURL here?
            $log.info(this.currURL) //this is printing "undefined"
        });
    }

网址是动态生成的,我必须从这些网址获取数据。在for循环执行之前生成url(并且url请求是异步的)。

我尝试了$ .ajax(currentURL)而不是$ http.get方法,但我得到了相同的结果 - “未定义”。

有没有办法可以在.success(function())中访问currentURL和'i'的当前值?

4 个答案:

答案 0 :(得分:2)

drawRect:可以轻松访问,而且由于您在for循环中创建了AJAX请求,因此您将始终将uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" 作为最后currentUrl值,因为渲染器将当AJAX req给出i时将打印该值,这将花费一些时间并且在index循环执行的时间内,所以始终最后一个索引值将在200中。为此,您必须使用IIFE

出于Demo的目的,我使用假在线REST API - http://jsonplaceholder.typicode.com/

RUNNING DEMO:http://plnkr.co/edit/djPMu4UH9t9BeGwBcUMI

<强> HTML

for

<强> JS

i

答案 1 :(得分:0)

您可以注册HttpInterceptor。在拦截器中,可以捕获/处理所有请求。

更多信息: https://docs.angularjs.org/api/ng/service/$http#interceptors

$provide.factory('myHttpInterceptor', function($q) {
  return {
     // optional method
     'request': function(config) {
       // This is your URL:
       console.log(config.url);
       return config;
     },
  };
});

不要忘记像这样注册httpInterceptor: $httpProvider.interceptors.push('myHttpInterceptor');

答案 2 :(得分:0)

将值存储在$ scope变量中,因为this.currUrl未定义

 var app = angular.module('callapp', []);
    app.controller('eController', function($scope, $http, $log) {
        $scope.urlString = []; //this is filled with values

        for( var i=0; i<3; ++i)
        {
            $scope.currentURL = $scope.urlString[i];
            $http.get($scope.currentURL)
            .success( function(response) {
                //how do I access currentURL here?

            });
 $log.info($scope.currentURL);
        }

答案 3 :(得分:0)

而不是使用for循环使用angular forEach。有关angularForeach的更多信息,请访问https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach?v=control

var app = angular.module('callapp', []);
app.controller('eController', function($scope, $http, $log) {
$scope.baseUrl = "http://jsonplaceholder.typicode.com/posts/";
$scope.urlString = [$scope.baseUrl + '1', $scope.baseUrl +'2',$scope.baseUrl + '3']; //this is filled with values

angular.forEach($scope.urlString,function(value,key){

    $http.get(value)
    .success( function(response) {
        $log.info(value) 
    });
}    
});

app.$inject = ['$scope', '$http', '$log'];