地址编码反向回调函数未调用

时间:2013-10-19 00:28:39

标签: javascript google-maps google-maps-api-3

我是Javascript的新手。我尝试使用Google api的Gmap v3来实现反向地理编码。我已经阅读了很多教程并编写了一个简单的代码。问题是传递给geocoder.geocode()的匿名函数有时会起作用,但有时它不会。谢谢你的帮助!

    function geoCode(latStr,lngStr){


      var lat = parseFloat(latStr);
      var lng = parseFloat(lngStr);
      var latlng = new google.maps.LatLng(lat, lng);

    codeLatLng(latlng,function(addr){
      alert(addr); // sometimes message appears.
    });
     }


  function codeLatLng(latlng,callback) {
      if (geocoder) {
        geocoder.geocode({'latLng': latlng}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            if (results[1]) {
              callback(results[1].formatted_address);
            } else {
              alert("No results found");
            }
          } else {
            alert("Geocoder failed due to: " + status);
          }
        });
      }
    }

2 个答案:

答案 0 :(得分:0)

我不确定Google服务是返回null还是空数组,但为了安全起见,您可以使用:if (results && results.length > )进行检查。另外,你是否忘记了Javascript中的数组是从零开始的?您可能需要results[0]

if (results && results.length > 0) {
    callback(results[0].formatted_address);
} else {
    alert("No results found");
}

作为解释:如果“results”是一个长度为0或1的数组,你的代码会在if (results[1])上崩溃,因此我猜测是间歇性的失败。

答案 1 :(得分:0)

var geocoder = new google.maps.Geocoder();
        geocoder.geocode({
            'latLng' : position
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                if (results[1]) {
                    address = results[1].formatted_address;
                    // alert("Wow ! Got it");
                } else {
                    // alert("No results
                    // found");
                    infowindow.setContent("No address found");
                }
            } else {
                // alert("Geocoder failed due
                // to: " + status);
                infowindow.setContent("Geocoder failed due to: " + status);
            }
            infowindow.setContent(address + '<br/>' + Timestamp);
        });

        infowindow.open(marker.get('map'), marker, this);
        currentInfoWindow = infowindow;

    });
}

尝试使用上面的代码