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);
}
});
我正在尝试更改全局变量纬度和经度的值但不能。我已经查找了为函数内部的全局变量赋值的方法,我认为我正在做那个部分。但显然我有些遗漏。请帮忙。
答案 0 :(得分:1)
function(results, status){ ... }
位是异步回调
您可能遇到的问题是,您在实际设置之前尝试访问longitude
和latitude
值
要确认这一点,请将您的回调修改为以下
// 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);
// ...
});
这样,您也可以跳过外部范围内的latitude
和longitude
。非常方便!
答案 1 :(得分:0)
我建议你将这两个变量附加到全局窗口对象。
喜欢:窗口。纬度和window.longitude
尝试更改值的函数是异步回调函数,可能存在在该范围内定义的同名的局部变量。
将它附加到窗口应该可以帮助你解决这个问题。
答案 2 :(得分:0)
试试这段代码:
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);
}
});
如果这样可以正常工作,那么答案可能是全局 正确设置,但是在其他代码尝试使用它们时,它们根本就没有设置。
如果发生这种情况,则意味着任何依赖于lat / long的代码都需要等到地理编码回调完成并接收到数据。