Javascript 使用地理定位和地理编码器定位用户';s城市并将其指定给变量
我试图定位用户的城市,并将其分配给一个全局变量以供进一步使用。我可以通过使用地理定位和地理编码并发出警报来获取这个城市。我的问题是。。如何将返回城市分配给全局变量,以便在Javascript 使用地理定位和地理编码器定位用户';s城市并将其指定给变量,javascript,google-maps,Javascript,Google Maps,我试图定位用户的城市,并将其分配给一个全局变量以供进一步使用。我可以通过使用地理定位和地理编码并发出警报来获取这个城市。我的问题是。。如何将返回城市分配给全局变量,以便在getCity函数之外使用它?这是我的代码,它会提醒用户当前的城市位置 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text
getCity
函数之外使用它?这是我的代码,它会提醒用户当前的城市位置
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
//get city fucntion
function getCity() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPos);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
//callback function to get lat and long
function showPos(position) {
// lat and long
var lat = position.coords.latitude;
var lng = position.coords.longitude;
//new geocoder to reverse geocoding
var geocoder = new google.maps.Geocoder();
//set lat and long
var latlng = new google.maps.LatLng(lat, lng);
//get address
geocoder.geocode({
'location': latlng
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[0]) {
//get city
alert(results[0]['address_components'][2].long_name);
}
}
});//end geocoder callback
}//end showPos callback
getCity();
</script>
这没什么用。有人能给我一些建议吗?更明确地说,您可以在回调之外使用它,但是您必须等待回调被执行,这样您的全局变量现在就被分配了正确的值 例如,请参见以下情况:
var城市;
函数getCity(){
if(导航器.地理位置){
navigator.geolocation.getCurrentPosition(showPos);
}否则{
x、 innerHTML=“此浏览器不支持地理位置。”;
}
警报(城市);//第一次调用时显示“未定义”
}
功能显示位置(位置){
var lat=位置坐标纬度;
var lng=位置坐标经度;
var geocoder=new google.maps.geocoder();
var latlng=新的google.maps.latlng(lat,lng);
geocoder.geocode({'location':latlng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK&&results[0]){
//进城
city=results[0]['address\u components'][2].long\u name;
警报(城市);//显示找到的城市。
showCity();//显示找到的城市。
}
});
}
getCity();
函数showCity(){
警报(城市);
}
showCity();//在此处调用时显示“未定义”。
请阅读geocodezip在您的问题评论中推荐的帖子。一旦您了解了JavaScript中的异步任务,一切都会变得更有意义。您需要使用回调中的数据,因为geocoder是异步的。您的警报将在数据返回之前发出。请给我举个例子好吗?我不知道你所说的消费数据是什么意思。我试着把所有其他使用“city”结果的代码都放在回调函数中,结果很好。有什么方法可以在回调之外使用结果吗?没有。。你不能使用它,除非它已被返回的副本
var city;
function getCity() {
city = results[0]['address_components'][2].long_name;
}
alert(city);