Обратный адрес от Google Maps Geocoder v3 - PullRequest
1 голос
/ 01 апреля 2011

У меня есть следующая функция:

$(function() {
     var address = $("#address").text();
     var r;

     function encodeAddress() {
       geocoder = new google.maps.Geocoder();
       geocoder.geocode({'address' : address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
           results[0].geometry.location
           r = results[0].geometry.location
           console.log("inside:" + r);
         } else {
           alert("Google Maps had some trouble finding" + address + status);
         }
       });
     }

    encodeAddress()
    console.log("outside:" + r);
});

Я пытаюсь вернуть геокодированный адрес для использования с Street View и Gmap.Inside возвращает правильное значение, а внешнее возвращает недоопределенное значение.

Вся помощь очень ценится, я читал где-то еще, что таким способом невозможно вернуть значение, но мне пришлось проверить это в надежном сообществе StackOverflow.

Заранее спасибо.

1 Ответ

4 голосов
/ 01 апреля 2011

Вы можете сделать это таким образом и вызвать функцию outputGeo в функции обратного вызова Geocode. По сути, вы обращаетесь к r до обратного вызова Geocode и, следовательно, r все еще не определено:

$(function() {
     var address = $("address").text();
     var r;

     function encodeAddress() {
       geocoder = new google.maps.Geocoder();
       geocoder.geocode({'address' : address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
           results[0].geometry.location;
           r = results[0].geometry.location;
           outputGeo(r);
         } else {
           alert("Google Maps had some trouble finding" + address + status);
         }
       });
     }

    encodeAddress();
    function outputGeo(result){
         console.log("outside:" + result);
    }
});

Вот объяснение того, как работает сервис геокодирования.

Доступ к сервису геокодирования асинхронный, так как Google Maps API должен позвонить внешний сервер. По этой причине вы необходимо передать метод обратного вызова выполнить по завершении запрос. Этот метод обратного вызова обрабатывает результат (ы). Обратите внимание, что геокодер может вернуть более одного результат.

...