Я просто не могу найти то, что случилось с этим битом кода:Возвращаемое значение с Google Maps геокодирования
function getLocationName(latitude, longitude) {
if (isNaN(parseFloat(latitude)) || isNaN(parseFloat(longitude))) {
return false;
}
var locationName;
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(latitude, longitude)
// Reverse Geocoding using google maps api.
geocoder.geocode({ 'latLng': latlng }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
locationName = results[1].formatted_address;
alert(locationName);
}
else {
locationName = "Unknown";
}
}
else {
locationName = "Couldn't find location. Error code: " + status;
}
});
alert(locationName);
return locationName;
}
Я называю это из обработчика JQuery событий, как это:
$("#id").on("event", function (event, ui) {
$("#userLocation").text(getLocationName(latitude, longitude));
});
Weird что первое предупреждение получает правильное значение «locationName», а второе всегда возвращает «undefined». Я попытался инициализировать переменную со значением, и в этом случае первое предупреждение снова вернуло правильное имя места, а второе вернуло значение инициализации. Это дает мне представление о том, что это может быть проблема с переменной областью, но я просто не могу понять, что.
PS. У меня нет других переменных (локальных/глобальных) с тем же именем.
Обновление: Предупреждение работает отлично (благодаря ответу Lwyrn), но возвращаемое значение по-прежнему не так. Я следил за ответами в связанном вопросе SO, но я не мог «вернуть» правильное значение. Предупреждение работало нормально.
Это не из-за переменного объема, это связано с асинхронным характером кода. http://stackoverflow.com/questions/2993563/how-do-retret-a-variable-from-google-maps-javascript-geocoder-callback?rq=1 – DCoder
Затем вы не внимательно прочитали связанный вопрос , Существует ** нет способа ** вернуть * значение из асинхронного действия, вам нужно использовать обратный вызов. (Хорошо, если вы сами делаете вызов AJAX, вы можете сделать его синхронным, а не асинхронным, но это просто неправильно по множеству причин.) – DCoder