如何使用JavaScript中的Open Weather API实现模块模式?

时间:2016-05-15 21:53:34

标签: javascript api

我正在Free Code Camp上进行此练习,主要使用Open weather API来获取用户本地天气并将其显示在网页上。

如果您想通过经度和纬度获取结果,那么开放天气API文档会指向您使用此功能:

api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}

这就是我在代码中提出的:

(function() {

    var publicAPI,

    APIKEY = '57b4067329333c5573c67f32a172d2ab',
    URL = 'http://api.openweathermap.org/data/2.5/weather?lat={geoFindMe.geoFindMeLatitude()}&lon={geoFindMe.geoFindMeLongitude()}&APPID={APIKEY}',

geoFindMe = (function() {

    if (!navigator.geolocation){
        console.log( "Geolocation is not supported by your browser");
        return;
    }

    var success = (function successHandlr (position) {
        var latitude  = position.coords.latitude;
        var longitude = position.coords.longitude;
           return {
                latitude : latitude,
                longitude : longitude
           };
    })(),

    successLatitude = success.latitude(position),
    successLongitude = success.longitude(position);


    function error() {
        console.log("Unable to retrieve your location");
        return;
    };
        return {
          geoFindMeLatitude : navigator.geolocation.getCurrentPosition(successLatitude, error),
          geoFindMeLongitude : navigator.geolocation.getCurrentPosition(successLongitude, error),
        };

})();

  $.getJSON(URL, function getWeatherData(json) {
    if (json) {
      console.log(json);
    }
  });

})();

我认为我是一个正确的轨道,因为我认为我需要创建单独的模块以传递给API中的longitudelatitude参数,但是我收到此错误。

Uncaught TypeError: Cannot read property 'coords' of undefined

任何帮助将不胜感激!

更新5/17/2016

来自chrome devs的错误/消息:

  在不安全的情况下,不推荐使用

getCurrentPosition()和watchPosition()   起源。要使用此功能,您应该考虑切换您的   应用程序到安全源,例如HTTPS。请参见无法检索   你的位置

(function() {

  var APIKEY = '57b4067329333c5573c67f32a172d2ab',

    success = function successHandlr(position) {
      var latitude = position.coords.latitude;
      var longitude = position.coords.longitude;

      $.getJSON('http://api.openweathermap.org/data/2.5/weather?lat=' + latitude + ' &lon=' + longitude + '&APPID=' + APIKEY, function getWeatherData(json) {
        if (json) {
          console.log(json);
        }
      });
    },
    error = function() {
      console.log("Unable to retrieve your location");
      return;
    };

  if (!navigator.geolocation) {
    console.log("Geolocation is not supported by your browser");
    return;
  } else {
    navigator.geolocation.getCurrentPosition(success, error);

  }

})();

0 个答案:

没有答案