我正在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中的longitude
和latitude
参数,但是我收到此错误。
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);
}
})();