Я для своей жизни не могу понять это. Я знаю, что это проблема с асинхронным способом ajax, который вызывает вызовы, но все же не может указать на проблему. У меня есть следующее:рельсы + функция jquery javascript, возвращаемое значение не определено
$(document).ready(function() {
$('#address').blur(function() {
console.log("now processing address");
var add = $("#address").val();
console.log("address is: " + add);
var refAdd = processAddress(add);
console.log("refined addres is: " + refAdd);
});
});
И вот у меня есть функция processAddress (благодаря другому сообщению на SO), которое я вызываю. Проблема в том, что последний оператор выше возвращает refAdd как undefined. Почему это??
function processAddress(address){
var geocoder = new google.maps.Geocoder();
if (geocoder) {
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
//console.log(results[0].geometry.location);
console.log(results[0].formatted_address);
console.log("latitude is: " + results[0].geometry.location_type);
}
else {
console.log("Geocoding failed: " + status);
//formatted_address = "Geocoding failed: " + status;
formatted_address = "failed"
}
});
}
}
Это довольно ясный асинхронный вопрос, я могу видеть в порядке вывода вывода; refAdd следует печатать последним, но это не так.
now processing address
address is: 415 N Mathilda Ave, Sunnyvale
refined addres is: undefined
415 N. Mathilda Ave, Sunnyvale, CA, USA
latitude is: ROOFTOP
Ваш метод processAddress ничего не возвращает. Конечно, запись возвращаемого значения отображается «undefined», потому что это буквально не определено. –