Как сделать, чтобы этот запрос геокодирования был назначен переменной? - PullRequest
1 голос
/ 14 ноября 2011

Я пытаюсь использовать геокод карты Google для преобразования этой строки адреса в объект LatLng.Я считаю, что, поскольку это асинхронный вызов, latlng получает нулевое значение.Что я могу сделать, чтобы присвоение переменной работало так, как я хочу?

var latlng = codeAddress(address)
alert("Lat/lng is: " + latlng);

function codeAddress(address) {
      geocoder.geocode( {'address':address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          return results[0].geometry.location;
        } else {
          alert("Geocode failed due to: " + status);
        }
      }); 
    }

1 Ответ

3 голосов
/ 14 ноября 2011

Поскольку geocode() является асинхронным, как вы также упоминаете, невозможно вызвать его синхронно. Итак, var latlng = codeAddress(address); это невозможно . Вам нужно использовать результат геокодирования внутри самой функции. Рассмотрим:

var latlng = null;
function codeAddress(address) {
      geocoder.geocode( {'address':address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          latlng = results[0].geometry.location; // use latlng here ..., e.g.:
          alert("Lat/lng is: " + latlng);
        } else {
          alert("Geocode failed due to: " + status);
        }
      }); 
    }

Вызов codeAddress(address) присваивает глобальной переменной latlng. Однако проблема в том, что вы не знаете, когда происходит назначение. В приведенном выше случае вы узнаете только после появления окна предупреждения.

Общий подход заключается в обработке результата геокодирования внутри обратного вызова, например, использовать результат для заполнения поля HTML.

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