0

无法将谷歌地理编码的返回值存储到全局/外部(javascript)变量(latlng1,在以下情况下)......也许是因为该变量在地理编码完成之前获得了它的值......

对于下面的代码:

alert(('latlon='+latlng1); //shows undefined

但,

alert('got value = '+latLng);   //gives the coorect value

那么,如何等待地理编码返回一个非空值,然后再将其分配给变量?

这能解决问题吗?还是代码中还有其他缺陷?

除此之外,代码的所有部分都可以正常工作(如下面代码中的注释所述);我看到标记也正确放置在地图上;

这是我的代码:-

    <script src="path_to_javascript_file.js"></script>

    $(some_element).click(function() {

             var input = document.getElementById(some_input_element).vlaue ;

             var get_geocodes =   function get_value(latLng) {
                              alert('got value = '+latLng);   //gives the coorect value
                              if (latLng == null){
                                  geocode(input, get_geocodes)} 
                              return latLng;
                                     }

             latlng1 =  geocode(input, get_geocodes);
             alert('latlon='+latlng1);  //says undefined

以下是我的 javascript_file.js(包含在上述代码的开头):

function geocode(query, mycallback) { 

            var geocoder = new google.maps.Geocoder();
            latLng = null
            geocoder.geocode( { 'address': query}, 
            function callback(results, status) {
                if (status == google.maps.GeocoderStatus.OK && results.length) {
                  var latLng = results[0].geometry.location;
                  console.log('geocoding successful : ' + latLng);   //gives the correct value
                  add_marker(latLng, query);                 
                  mycallback(latLng);                    
                }

             else {
                  console.log("geocoding unsuccessful because of: " + status);
                }
            });  
          }


function add_marker(latLng , query) {

                    var new_marker = new google.maps.Marker({
                      position: new google.maps.LatLng(latLng.lat(), latLng.lng()),
                      map: map,
                      title: query ,
                      animation: google.maps.Animation.DROP                
                      }); 

                    console.log(new_marker.getPosition().lat());  //gives the correct value
                    console.log(mew_marker.getPosition().lng());  //gives the correct value
                    alert('added_marker'+latLng+',,'+location);   //gives the correct value

}
4

1 回答 1

0

如评论中所述,您需要等到google.maps.Geocoder()完成执行。

您的函数geocode不返回任何内容,因此变量latlng1未定义也就不足为奇了。无论如何,如果地理编码将返回latLng值,则无法保证会定义latlng1 。

我的建议:

  1. 只需调用geocoder函数而不将其分配给latlng1
  2. 通过在所有函数之外对其进行初始化,使latlng1变量成为全局变量。
  3. 根本不要使用latLng变量,只需将所需的值直接分配给全局变量latlng1,如下所示:

    latlng1 = results[0].geometry.location;
    
  4. 在这两个调用中用latlng1替换latLng变量: add_marker(latlng1, query) 和mycallback(latlng1)函数或(最后一个建议不是必需的,只是推荐。)只需重新定义 add_marker() 以仅接受一个值 - querymycallback( )不接受任何值,只在这些函数中使用全局latlng1 。

于 2013-08-17T00:33:51.683 回答