我正在尝试使用API显示当地天气。 API网址会根据用户的本地位置生成。
var lat,lon = null;
var key = "mykey";
var api = "";
function setApi(position){
lat = Math.round(position.coords.latitude*1000)/1000;
lon = Math.round(position.coords.longitude*1000)/1000;
api = "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + key;
}
navigator.geolocation.getCurrentPosition(setApi);
$.getJSON(api, function(data){
console.log(data.sys.country);
});
如果我使用 api 全局变量作为$ .getJSON函数的参数,问题就不会发生。如果我使用字符串代替它。 E.g:
$.getJSON("http://api.openweathermap.org/data/2.5/weather?lat=46.295&lon=30.648&appid=%mykey%", function(data){
console.log(data.sys.country);
});
答案 0 :(得分:0)
我相信您遇到的问题是,在调用$.getJSON
时,实际的api
值仍设置为""
。
这很可能是由getCurrentPosition
中的异步操作引起的。这意味着$.getJSON
在setApi
回调函数之前被有效调用。
我建议根据您当前的代码,最简单的解决方案是在您的$.getJSON
函数中移动setApi
调用,这样您就可以确定它只被称为在之后,api
值已正确设置。
例如:
var lat,lon = null;
var key = "mykey";
var api = "";
function setApi(position){
lat = Math.round(position.coords.latitude*1000)/1000;
lon = Math.round(position.coords.longitude*1000)/1000;
api = "http://api.openweathermap.org/data/2.5/weather?lat=" + lat + "&lon=" + lon + "&appid=" + key;
$.getJSON(api, function(data){
console.log(data.sys.country);
});
}
navigator.geolocation.getCurrentPosition(setApi);