我有以下控制器
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'的当前值?
答案 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'];