Возврат нескольких значений из функции JavaScript, приводящей к ошибке в Google Maps V3 - PullRequest
1 голос
/ 17 ноября 2011

Я хочу создать маркеры из сохраненного местоположения пользователя. Так что для этого мне нужны широта и долгота. Я получил lat & lon в своей функции get_current_user_lat_lon. Теперь я хочу вернуть оба значения через объект, но мой возврат не работает ....

function initialize(){
    var var_get_current_user_lat_lon = get_current_user_lat_lon(); 
    var latitutde = var_get_current_user_lat_lon.latitutde;
    alert(latitutde);// not even alert
    var longitutde = var_get_current_user_lat_lon.longitutde;
    alert(longitutde); // not even alert
}        

function get_current_user_lat_lon(){
    var address = $("#hidden_current_location").val();//Working fine
    geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var variable = results[0].geometry.location;
            var lat  = variable.lat();
            var lon  = variable.lng();
            alert(lat); //Working fine
            alert(lon); //Working fine
            //return not working here
        }
        //return not working here
    });
    return {latitutde: lat , longitutde : lon};// giving error lat.lon is not defined means return not working here
}

1 Ответ

1 голос
/ 17 ноября 2011

Ваши переменные "lat" и "lon" объявлены внутри обратного вызова из "geocode ()".Однако даже если вы объявите их вне этого, общая идея не сработает.Функция geocode () имеет вид асинхронный ;по этой причине в первую очередь существует функция обратного вызова.

Вместо того, чтобы структурировать свой код так, чтобы ваша функция get_current_user_lat_lon () * возвращала значение, следуйте примеру архитектуры Google исделать вашу собственную функцию принять обратный вызов:

function get_current_user_lat_lon( callback ){
  var address = $("#hidden_current_location").val();//Working fine
  geocoder = new google.maps.Geocoder();
  geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var variable = results[0].geometry.location;
        var lat  = variable.lat();
        var lon  = variable.lng();
        callback({latitude: lat, longitude: lon});
      }

  });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...