使用两个AJAX GET调用的结果返回一个对象

时间:2016-08-08 23:19:44

标签: angularjs

我正在制作一个简单的天气应用程序,它可以从天气API获取当前和每周预测。为了简单起见,我真的很喜欢我的weatherService函数getForecast,以某种方式进行两次AJAX调用 - 一次用于每周预测,我已经拥有,一次用于当前预测(遗憾的是,我不认为此API具有检索包含两者的JSON返回的方法)。我不确定这样做的最好方法,我对Angular很新。

这是我的服务:

weather.service('weatherService', function($resource, $http){

    this.currentForecast = null;

    // default city
    this.city = 'Chicago, IL';

    this.getForecast = function(location, type) {

            return $http({
                method : "GET",
                url : "http://api.openweathermap.org/data/2.5/forecast/daily?q="+location+"&mode=json&cnt=7&appid=e92f550a676a12835520519a5a2aef4b"
            }).then(
                 function(response) {
                     return response.data;
                 }
            )
    };

});

我想要第二个GET,从http://api.openweathermap.org/data/2.5/weather?q=Chicago,IL&appid=e92f550a676a12835520519a5a2aef4b检索并附加到响应中,以便返回一个对象。

另外,如果这不是实现这一目标的最佳方式,我当然愿意接受建议。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是角度承诺库$q

$q.all([$http(...), $http(...),...]).then(function(ret){
    // ret has all results from all ajax calls         
})

更具体地说:

weather.service('weatherService', function($resource, $http, $q){

  this.getForecast = function(location, type) {
     return $q.all([
         $http.get(url1(location, type)), 
         $http.get(url2(location, type))
     ])
  }

})


...


weatherService.getForcast(location, type).then(function(ret){ 
    console.log(ret[0].data)
    console.log(ret[1].data)     
})

egghead.io

上使用$ q.all有很棒的视频

答案 1 :(得分:0)

嗯,你可以使用网络工作者,但是你有6个问题。您还可以使用then回调链接请求。