【问题标题】:Not able to return Geocode latLng无法返回地理编码 latLng
【发布时间】:2011-08-07 09:17:02
【问题描述】:

我创建了一个函数来返回纬度和经度。
问题是alert('outside:')是在geocoder.geocode之前触发的。

查看this similar example,这个函数应该可以工作。

 function getLatLng(geocoder, adr) {
    var latLng = '';
    geocoder.geocode({ 
      address: adr}, function(results, status){
        if (status == google.maps.GeocoderStatus.OK && results.length) {
          latLng = results[0].geometry.location;
          alert('inside: ' + latLng); // This works
        } 
      }
    );
    alert('outside: ' + latLng); // This shows NULL
    return latLng;
 }

那么我需要做什么才能返回 latlng 值?

【问题讨论】:

    标签: javascript google-maps latitude-longitude


    【解决方案1】:

    您将看到这种模式在 JavaScript 中大量用于异步操作 - geocode() 的第二个参数是一个回调函数,当潜在的昂贵且长期存在的地理编码操作完成时会调用它。如果调用是同步的,它将锁定您的网页和任何其他 JavaScript 代码,直到它返回。

    使用异步函数的一个小挫折是它们会立即返回,因此您不能使用return 返回值;就像您在地理编码示例中发现的那样 - 对 geocode() 的调用立即返回而没有结果,并在后台工作,稍后使用实际结果调用回调函数。

    一种解决方案是在对getLatLng 的调用中自己指定一个回调函数:

    function getLatLng(geocoder, adr, myCallback){
        var latLng = '';
        geocoder.geocode({
                    address: adr
                }, 
                function(results, status){
                    if (status == google.maps.GeocoderStatus.OK && results.length) {
                        latLng = results[0].geometry.location;
                        if(myCallback){
                            myCallback(latlng);
                        }
                    }
                });
    }
    

    【讨论】:

      【解决方案2】:

      这是一个异步函数,你不能这样做

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-14
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 2014-10-24
        • 2012-09-15
        相关资源
        最近更新 更多