1

我有以下功能:

$(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);
});

我正在尝试返回用于街景和 Gmap 的地理编码地址。内部返回正确的值,外部返回underfined。

非常感谢所有帮助,我确实在其他地方读到过无法以这种方式返回值,但必须咨询可信赖的 StackOverflow 社区。

先感谢您。

4

1 回答 1

4

您可以这样做,并在 Geocode 的回调函数中调用 outputGeo 函数。基本上,您在地理编码回调之前访问 r ,因此 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 需要调用外部服务器。因此,您需要传递一个回调方法以在请求完成时执行。此回调方法处理结果。请注意,地理编码器可能会返回多个结果。

于 2011-04-01T18:09:45.467 回答