Google地图错误:a为空

时间:2011-03-29 20:21:33

标签: javascript google-maps

我有一个程序,我想使用谷歌地图。问题是我得到一个错误,表示a为null,其中a是google map api中使用的var。以下是我调用谷歌地图的方式:

//Creates a new center location for the google map
    var latlng = new google.maps.LatLng(centerLatitude, centerLongitude);

    //The options for the google map
    var myOptions = {
        zoom: 7,
        maxZoom: 12,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    //Creates the new map
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

以下是我的HTML标记:

<div id = "map_canvas"></div>

我通过网址获取页面加载的lat和lng。这些值正确传递,所以我知道这不是问题。我认为这与var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);不正确有关。有什么建议吗?

编辑:以下是错误消息:

  

a为空   fromLatLngToPoint(A = NULL)   yg(a = null,b = Object {zoom = 7,maxZoom = 12,more ...})   d(d =文件Default.aspx?lat = 30.346317&amp; lng = 105.46313,f = [function()])   d(A =未定义)   d()   [Break On This Error]功能Qf(a){a = af [9];返回a!= i?a:...);功能sg(a){a [ic]&amp;&amp; a [ic] VB}

10 个答案:

答案 0 :(得分:53)

确保指定包含地图的元素的大小。例如:

<div id="map_canvas" style="width: 500px; height: 500px;"></div>

还要确保您的地图变量是在全局范围内定义的 在加载DOM后初始化地图。

答案 1 :(得分:21)

您可能没有收听页面完全加载时触发的onload事件。因此,您的脚本正在运行,但您正在创建的div尚不存在。使用jQuery来监听这个事件,如下所示:

$(document).ready(function () {
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
});

如果您不想使用jQuery,请向body.onload

添加一个事件监听器

答案 2 :(得分:10)

这个相当神秘的错误意味着脚本无法找到map div。 出现这种情况可能有几个原因。

1。您使用错误的ID来引用地图。

检查你的id(或类)并确保你所指的元素确实存在。

2。您在DOM准备好之前执行脚本。

这是一个jQuery示例。请注意,我们正在触发文档就绪的初始化,而不是onDOMReady。我冒昧地将脚本包装在一个封闭中。

(function($) {
  function initialize() {
    var mapOptions = {
      center: new google.maps.LatLng(-34.397, 150.644),
      zoom: 8,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map"),
        mapOptions);
  }
  $(document).ready(initialize);
})(jQuery)

你也可以使用:

google.maps.event.addDomListener(window, 'load', initialize);

如果您更喜欢Google解决方案。

答案 3 :(得分:9)

有完全相同的问题,这是我为我修好了。

事情是,我的网站上有2张谷歌地图 - 一张在页脚中,另一张在联系页面上,但我在一个JS文件中调用它们是这样的:

var map1 = new google.maps.Map(document.getElementById("map-canvas-footer"), settings1);
var map2 = new google.maps.Map(document.getElementById("map-canvas"), settings2);

但问题是id="map-canvas"的对象只位于联系页面上。 所以首先你必须检查页面上是否存在该元素:

if ($("#map-canvas-footer").length > 0){
    var map1 = new google.maps.Map(document.getElementById("map-canvas-footer"), settings1);        
}

if ($("#map-canvas").length > 0){
    var map2 = new google.maps.Map(document.getElementById("map-canvas"), settings2);
}

我希望这也可以帮助其他人;)

答案 4 :(得分:3)

当地图尚未加载时会发生这种情况。您应该在加载Maps API JavaScript时构建地图。仅在API完全加载时执行函数初始化映射,并将其传递给Maps API引导程序中的“callback”参数。

function initialize() {
  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
}

function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&sensor=TRUE_OR_FALSE&callback=initialize";
  document.body.appendChild(script);
}

window.onload = loadScript;

这实际上是在Maps API文档here中。希望这有帮助!

答案 5 :(得分:2)

确保您的画布div(与地图关联的Div)存在。 有时,如果我们重命名div的id属性。 然后它会产生问题,因为它没有得到画布div。

答案 6 :(得分:1)

我已修复它从“div”标记中删除我的“style”属性并在css文件中正确声明

答案 7 :(得分:1)

我有一次这个错误。确保地图脚本仅在使用地图的页面上运行。您可以使用“if”检查地图是否存在。像这样:

if ($('mapClass').length>0) { // here you run the google maps functions }

见你

答案 8 :(得分:0)

解决了,谷歌地图输入错误,请确保使用alert(map)正确返回对象var map = document.getElementById('map-canvas')。检查与getElementByid中指定相同的div容器ID名称。

我也遇到了相同类型的错误,通过检查getElementByid('map-canvas')修复了它。示例代码enter link description here

答案 9 :(得分:0)

我的回答有点老,但是对于那些仍然来这里参考的人,我有一个类似的解决方案。我按照此处https://developers.google.com/maps/documentation/javascript/adding-a-google-map

的说明放置了地图初始化代码

内部jQuery文档ready函数。以下是适用于我的情况的代码:

$(document).ready(function () {
    var uluru = {lat: -25.344, lng: 131.036}; 
    var map = new google.maps.Map( document.getElementById('embedmap'), {zoom: 14, center: uluru} ); 
    var marker = new google.maps.Marker({position: uluru, map: map});

});