Angularjs api url in循环

时间:2014-08-05 13:05:56

标签: angularjs angularjs-controller

$http({method: 'GET', url: '/xxx/xxx/xas'}).success(function(data) {        
    $scope.website = data.websites;
    });

$http({method: 'GET',url: '/xx/xasxxx?websiteId='+$scope.website.websiteId}).success(function(data) {
     $scope.onlinedata1 = data.coupons;                      
 });

我尝试从顶级网址获取网站ID并将该ID传递到第二个网址.my json数据结构

"websites":[{
     "websiteName":"Flipkart",
     "websiteId":"1",
      },
      {
     "websiteName":"asas",
     "websiteId":"5",
      }]

尝试逐个传递每个ID。我正在使用AngularJS v1.2.17。

2 个答案:

答案 0 :(得分:1)

在第一个成功回调中移动第二个HTTP调用:

$http({method: 'GET', url: '/xxx/xxx/xas'}).success(function(data) {        
    $scope.website = data.websites;

    for (var i = 0; i < data.websites.length; i++)
    {
        $http({method: 'GET',url: '/xx/xasxxx?websiteId='+data.websites[i].websiteId}).success(function(data) {
            $scope.onlinedata1 = data.coupons;                      
        });
    }
});

考虑到您的请求是GET,可以简化这一点:

$http.get('/xxx/xxx/xas')
    .then(function(res) {        
        for (var i = 0; i < res.data.websites.length; i++)
        {
            $http.get('/xx/xasxxx?websiteId='+res.data.websites[i].websiteId)
                .then(function(res) {
                    $scope.onlinedata1 = res.data.coupons;                      
            });
        }
});

请注意,上述内容将针对API返回的每个网站发出一个请求。如果您可以控制API,则可能需要考虑在第二个URL资源(/xx/xasxxx?websiteIds=1,5,7,12,56)上接受多个网站ID,以限制客户端发出的请求数。

答案 1 :(得分:0)

在模块ng中使用$ q - service 一种服务,可以帮助您异步运行函数,并在完成处理时使用它们的返回值(或异常)。