谷歌地图api3出错

时间:2012-05-24 18:26:35

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

我正在尝试在我的网页中嵌入带有标记的谷歌地图。但是如果我使用以下代码

,我将收到一条未定义的警报消息
var infowindow = null;
var geocoder;
$(document).ready(function () { initialize();  });

function codeAddress(address) {
    geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            //alert(results[0].geometry.location);
            return (results[0].geometry.location);
        } 
    });
}

function initialize() {
    default_location = codeAddress("<?php echo $location;?>");
    alert(default_location);
}

而不是如果我在codeAdress函数中执行警报,如下所示,它正确显示纬度和经度。

var infowindow = null;
var geocoder;
$(document).ready(function () { initialize();  });

function codeAddress(address) {
    geocoder = new google.maps.Geocoder();
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            alert(results[0].geometry.location);

        } 
    });
}

function initialize() {
    codeAddress("<?php echo $location;?>");
}

有人可以确定问题是什么吗?我是javascripts的新手

3 个答案:

答案 0 :(得分:3)

地理编码器调用是异步的,这意味着它需要一些时间才能返回,并且不遵循所写的顺序。它还意味着在第一位,函数在到达return (results[0].geometry.location)语句之前完成。所以alert无需显示任何内容。

除了在geocode请求中插入语句之外,您还可以编写一个回调模式来分隔脚本逻辑。在geocode调用成功时执行回调,该回调将位置作为参数传递。

http://jsfiddle.net/3KXKm/

  var infowindow = null;
  var geocoder = new google.maps.Geocoder();

  $(document).ready(function () { initialize();  });

  function codeAddress(address, callback) {
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        callback(results[0].geometry.location);
      } 
    });
  }

  function initialize() {
    codeAddress("Chicago, IL", function(default_location) {
      var map = new google.maps.Map(document.getElementById("map_canvas"),
        { center: default_location,
        zoom: 3, mapTypeId: google.maps.MapTypeId.ROADMAP });

      locations = ["Los Angeles", "Davis", "Truth or Consequences",
        "Ann Arbor", "Massachusetts"];

      for (var i = 0; i < locations.length; i++) {
        codeAddress(locations[i], function(latLng) {
          new google.maps.Marker({map:map, position:latLng});
        });
      }
    });
  }

答案 1 :(得分:0)

地理编码不会立即返回结果。这就是为什么在代码的第一个版本中什么也得不到的原因。因此,如果您想对地理编码结果执行某些操作,则应在回调函数中执行此操作,就像在代码的第二个版本中一样。

答案 2 :(得分:0)

return (results[0].geography.location);

仅返回嵌套函数的值,而不是codeAddress函数的值。也许如果侯告诉我们你想要做什么,我们可以提供帮助。