如何在$ http.get中使用更多参数并将它们添加到url

时间:2017-03-02 08:37:43

标签: angularjs

我遵循一个角度教程,因为我的服务中使用的链接自教程编写后发生了变化,我很困惑如何在params中使用第二个参数,这是api.openweathermap现在需要的appid .ORG。

function weatherFactory($http) {
    return {
        getWeather: function(city, country) {
            var query = city + ', ' + country;
            var key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            return $http.get('http://api.openweathermap.org/data/2.5/weather?', {
                params: {
                    q: query,
                    appid: key
                }
            }).then(function(response) {
                // //then() returns a promise which 
                // is resolved with return value of success callback
                return response.data.weather[0].description;
            });
        }
    };
}

链接应如下所示:

http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a1

所以我把钥匙放在了第二个参数中,但是我不知道如何添加这个&在appid前面,就像在他们的链接示例中一样。 有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:2)

在此demo fiddle中尝试。分隔符&由AngularJS自动添加。

$http({
  method: 'GET',
  url: 'http://api.openweathermap.org/data/2.5/weather?',
  params: {
    appid: 'b1b15e88fa797225412429c1c50c122a1',
    q: 'London,uk'
  }
}).then(function(response) {
   return response.data.weather[0].description;
});

结果:

  

http://api.openweathermap.org/data/2.5/weather?&appid=b1b15e88fa797225412429c1c50c122a1&q=London,uk

答案 1 :(得分:1)

  

但我不知道如何在appid前添加此&,就像在他们的链接示例中一样

&是查询字符串的分隔符。将传递给params的对象转换为查询字符串时,应添加它。

您没有将对象转换为查询字符串。 Angular是。所以什么都不做。 Angular会为你做这件事。

如果您手动转换它,您可以执行以下操作:

var pairs = [];
Object.keys(obj.params).forEach(function (key) {
    pairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
});
var query_string = pairs.join("&");

......但如上所述。这是由图书馆为您完成的。