Я пытаюсь найти город пользователя и назначить его глобальной переменной для дальнейшего использования. Я могу получить город, используя геолокацию и геокодер и предупреждая об этом. Моя проблема заключается в том, как ... как присвоить город возвращения глобальной переменной, поэтому я могу использовать ее за пределами функции 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>
Приведенный выше код будет предупреждать город пользователя. Теперь я хочу, чтобы город был назначен глобальной переменной, поэтому я могу использовать его для чего-то еще. Я попытался объявить переменную за пределами функции getCity()
и присвоить ее results[0]['address_components'][2].long_name
; такие как ...
var city;
function getCity() {
city = results[0]['address_components'][2].long_name;
}
alert(city);
Это ничего не значит. Может ли кто-нибудь дать мне несколько предложений?
Вам необходимо использовать данные в обратном вызове, так как геокодер является асинхронным. Ваше предупреждение будет срабатывать до того, как данные будут возвращены. – charlietfl
Может привести пример? Я не знаю, что вы подразумеваете под потреблением данных. Я попытался поместить все мои другие коды, которые используют результат «city» внутри обратного вызова, и он работает. Есть ли способ, которым я могу использовать результат вне обратного вызова? – lys916
Нет .. вы не можете использовать его до тех пор, пока он не будет возвращен. – charlietfl