Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用地理定位和地理编码器定位用户';s城市并将其指定给变量_Javascript_Google Maps - Fatal编程技术网

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);