Javascript更改全局变量的值
我试图更改全局变量纬度和经度的值,但无法更改。我已经找到了在函数中为全局变量赋值的方法,我认为这一部分做得不错。但很明显,我遗漏了一些东西。请提供帮助。函数(结果、状态){…}位是一个异步回调 您可能遇到的问题是,您试图在实际设置Javascript更改全局变量的值,javascript,Javascript,我试图更改全局变量纬度和经度的值,但无法更改。我已经找到了在函数中为全局变量赋值的方法,我认为这一部分做得不错。但很明显,我遗漏了一些东西。请提供帮助。函数(结果、状态){…}位是一个异步回调 您可能遇到的问题是,您试图在实际设置经度和纬度值之前访问它们 要确认这一点,请将回调修改为以下内容 var longitude=1; var latitude=1; var geocoder = new google.maps.Geocoder(); geocoder.geocode( { '
经度
和纬度
值之前访问它们
要确认这一点,请将回调修改为以下内容
var longitude=1;
var latitude=1;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': Position}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
alert(results[0].geometry.location.lat());
alert(results[0].geometry.location.lng());
latitude = results[0].geometry.location.lat();
longitude = results[0].geometry.location.lng();
//alert("location : " + results[0].geometry.location.lat() + " " +results[0].geometry.location.lng());
} else {
alert("Something got wrong " + status);
}
});
你应该好好看看他们。一旦你有了这个功能,你可以完全跳过它们,做类似的事情
// where you have these two lines
latitude = results[0].geometry.location.lat();
longitude = results[0].geometry.location.lng();
// add this line after
console.log(latitude, longitude);
这样,您也可以跳过外部范围中的
纬度
和经度
。非常方便 我建议您将这两个变量附加到全局窗口对象
比如:窗户。经纬度
而试图更改值的函数是一个异步回调函数,在该范围内可能定义了具有相同名称的局部变量
将其附加到窗口可以让您避免这种可能性。尝试以下代码:
function doSomething(lat, lng) {
console.log(lat, lng);
}
geocoder.geocode( { 'address': Position}, function(results, status) {
// ...
var loc = results[0].geometry.location,
lat = loc.lat(),
lng = loc.lng();
doSomething(lat, lng);
// ...
});
如果这是正确的,那么答案可能是globals的设置是正确的,但是在其他代码尝试使用它们时,它们还没有被设置
如果出现这种情况,则意味着任何依赖lat/long的代码都需要等待,直到地理代码回调完成并接收到数据。警报给出了正确的结果,但这些值没有被分配到纬度和经度。是的,这确实是个问题。我需要放置一些延迟函数来等待赋值吗?你不需要人为地延迟任何东西,但是你需要确保你调用的任何函数都在Google Maps回调中被调用。
var longitude=1;
var latitude=1;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': Position}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latitude = results[0].geometry.location.lat();
longitude = results[0].geometry.location.lng();
alert(latitude + ', ' + longitude) // show the value of the globals
} else {
alert("Something got wrong " + status);
}
});