当我从http请求中获得结果时,我想修改范围。为了测试,我尝试在发出http请求之前和成功之后显示范围:
$scope.CopyFiles=function(destination){
for(var i=0; i<$scope.list.length; i++){
console.log("test 1 "+$scope.list[i]);
var response=$http({method: 'GET', url:
'/checkIsSubdir/'+$scope.list[i]+'/'+destination});
response.success(function(result) {
console.log("check"+result.data);
console.log("test 2 "+$scope.list[i]);
});
response.error(function(data, status, headers, config) {
console.log("checksubdir oops");
});
};
我的http请求已成功,因为它显示了我的result.data
。
我的问题是第一个console.log("test 1 "+$scope.list[i]);
显示范围但是
console.log("test 2 "+$scope.list[i]);
显示未定义
如何解决此问题?
答案 0 :(得分:1)
只需在for循环中异步执行代码即可。
这是因为你的for循环进行了ajax调用&amp;当值不满足循环条件时结束i
的值将是+1而不是$scope.list.length
,这就是为什么你得到$scope.list[i]
值未定义的原因。< / p>
在这种情况下,使用angular.forEach
可以解决您的问题,此处索引值可用于循环成功
angular.forEach($scope.list, function(value, index){
console.log("test 1 "+$scope.list[index]);
var response=$http({method: 'GET', url:
'/checkIsSubdir/'+$scope.list[index]+'/'+destination});
response.success(function(result) {
console.log("check"+result.data);
console.log("test 2 "+$scope.list[index]);
});
response.error(function(data, status, headers, config) {
console.log("checksubdir oops");
});
});