-1

我正在尝试将来自多个来源的数据读入 AngularJS 控制器,就像这样 -

var Controller = function ($scope, $http) {
    var load = {
        somekey: "/data/a.json",
        someotherkey: "/data/b.json",
        yetanotherkey: "http://restapi"
    }
    for (var i in load) {
        $http({
            url: load[i],
            method: 'GET'
        }).success(function (data, status, headers, config) {
            $scope[i] = data; // <<---- this does not point to the right value of i
        }).error(function (data, status, headers, config){
            $scope[i] = "Error getting content for " + i;
        });
    }
}

然而,这段代码似乎不起作用,因为i当回调仍在执行时,变量的内容在循环中发生了变化(即 HTTP 请求没有在遍历字典中所有值的时间内完成),所以只有的最后一个值i已更新,所有其他值均未使用。

我该如何解决这个问题?

4

2 回答 2

1

我想编写循环的正确方法是-

Object.keys(load).forEach(function (element, index, array) {
    $http({
        url: load[element],
        method: 'GET'
    }).success(function (data, status, headers, config) {
        $scope[element] = data;
    }).error(function (data, status, headers, config){
        $scope[element] = "Error getting content for " + i;
    });
});
于 2013-02-20T17:55:40.897 回答
0

或者,当然,自己做一个简单的闭包:

for (var item in load) {
    (function(i) {
        $http({
            url: load[i],
            method: 'GET'
        }).success(function (data, status, headers, config) {
            $scope[i] = data; // <<---- this does not point to the right value of i
        }).error(function (data, status, headers, config){
            $scope[i] = "Error getting content for " + i;
        });
    })(item);
}
于 2014-07-22T10:37:49.923 回答