【问题标题】:JS is saying that I have an undefined object. Could REALL use some help figuring this outJS 说我有一个未定义的对象。真的可以使用一些帮助来解决这个问题
【发布时间】:2012-03-16 22:32:13
【问题描述】:

今天我的任务是第一次使用 Google API 创建地图。我在我的网站上设置地图没有问题,这很容易。但由于某种原因,我用 json 编码的观点没有出现。这是说我的 gmap 对象是未定义的。我真的可以在这里得到一些帮助,我整天都在看这个东西!!

function load () {
    var map = document.getElementById("map");
    if (GBrowserIsCompatible()) {
        var gmap = new GMap2(map);
        gmap.addControl( new GSmallMapControl() );
        gmap.addControl( new GMapTypeControl()) ;
        gmap.addControl( new GOverviewMapControl(new GSize(100,100)) );
        gmap.setCenter( new GLatLng(42.3313889, -83.0458333), 7 );
    } else {
        alert("Sorry, your browser cannot handle the true power of Google Maps");
    }
}

window.onload = load;
window.onunload = GUnload;

function createMarker(input) {
    var marker = new GMarker(input.point);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml( input.walkName + input.date + input.address );
    });
    return marker;
}

function parseJson (doc) {
    var jsonData = eval("(" + doc + ")");
    for (var i = 0; i < jsonData.markers.length; i++) {
        var marker = createMarker(jsonData.markers[i]);
        gmap.addOverlay(marker);
        }
}

GDownloadUrl("points.json", function(data, responseCode) {
    parseJson(data);
});

【问题讨论】:

  • 页面上是否存在id为map的元素?
  • 是的,地图显示正常。这里的问题是标记没有显示在 paarseJson 函数中的 addOverlay 函数中。

标签: javascript json google-api


【解决方案1】:

您在 parseJson 函数中使用 gmap 变量。但它是在 load() 函数中声明的。他们不共享范围。只需将 gmap 声明移到两个函数之外,这样它就在它们两个函数的共同范围内。

【讨论】:

  • 嗨,我试过了,但是一旦我把它们的功能都拿出来,地图就不会加载了。我知道加载函数中的那个必须留在那里,因为它允许地图显示在 div 标签中,并在我的 html 中显示 id 地图。
【解决方案2】:

看起来gmap 是在load 函数的范围内定义的。因此,它在您引用它的 parseJSON 函数中不可用。

【讨论】:

  • 那么,我也应该在 parseJSON 函数中定义它吗?我可以复制同一行并把它放在那里吗?
  • 没有。将var gmap; 放在代码顶部并将var gmap = new GMap2(map); 行更改为gmap = new GMap2(map);(删除单词var)。这在外部范围内定义了变量gmap,因此loadparseJSON 都可以“看到”它。目前它是在load 函数中声明的,所以parseJSON 不能“看到”它。
  • 好的,我做到了,但积分仍然没有显示。它的说法,不能调用未定义的方法'addOverlay'。
  • load 是否正在执行之前 parseJSONload初始化地图,如果你还没有地图,你不能画任何东西:P
  • 我相信是这样,我的意思是你不能从上面的代码中看到它吗?我把加载函数放在第一位。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 2013-08-12
  • 2020-08-06
  • 1970-01-01
  • 2022-10-17
  • 2019-04-15
  • 2023-03-19
相关资源
最近更新 更多