不能使用全局变量作为jQuery函数的参数

时间:2016-09-13 10:02:19

标签: javascript jquery

我正在尝试使用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);
});

1 个答案:

答案 0 :(得分:0)

我相信您遇到的问题是,在调用$.getJSON时,实际的api值仍设置为""

这很可能是由getCurrentPosition中的异步操作引起的。这意味着$.getJSONsetApi回调函数之前被有效调用。

我建议根据您当前的代码,最简单的解决方案是在您的$.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);