-1

请帮我解决这个问题。
我想从谷歌地图中的纬度、经度获取地址。这是我的功能:

function codeLatLng() {
var geocoder = new google.maps.Geocoder();
var lati = document.getElementById("latitude_value").value;
var lngi = document.getElementById("longitude_value").value;
var latlng = new google.maps.LatLng(lati, lngi);
var infowindow = new google.maps.InfoWindow();
var ngo;
geocoder.geocode({'latLng': latlng}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    if (results[1]) {
      map.setZoom(11);
      marker = new google.maps.Marker({
        position: latlng,
        map: map
      });
      ngo = results[1].formatted_address;
      infowindow.setContent(results[1].formatted_address);
      infowindow.open(map, marker);
    }
  } else {
    alert("Geocoder failed due to: " + status);
  }
});
return ngo;
 }

执行此功能时。地址显示在地图中。
然而,这不是我需要的。我只想将此地址作为字符串分配给变量“ngo”。
此函数返回“ngo”,它在文本字段中显示为“未定义”。
我需要一些帮助来解决这个问题。
谢谢。

4

2 回答 2

1

我只想将此地址作为字符串分配给变量“ngo”。

这就是问题所在。你不能那样做。JavaScript 不能那样工作。地理编码器调用是异步的。它在从服务器接收到数据之前返回。在调用地理编码器回调函数之前,数据还没有准备好。

您需要做的是ngo在回调函数本身中使用该数据,或者调用另一个函数并将数据传递给它,然后在那里使用数据。

例如,你有这条线:

ngo = results[1].formatted_address;

您可以将其替换为:

useNGO( results[1].formatted_address );

你在哪里useNGO定义的函数(在任何地方)是这样的:

function useNGO( ngo ) {
    // Do stuff with ngo here
}
于 2013-04-15T08:58:35.090 回答
0

我相信您的问题是var在声明时使用关键字var ngongo生成一个局部变量,因此它不存在于codeLatLng(). 尝试删除var ngo,放置ngo = "";在任何函数声明之外的某个地方(就像之前一样function codeLatLng() {),让我知道这是否有效:)

于 2013-04-15T09:06:36.877 回答