JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗

JS is saying that I have an undefined object. Could REALL use some help figuring this out

本文关键字:帮助 解决 问题 有一个 未定义 真的 对象 JS      更新时间:2023-09-26

今天我的任务是第一次使用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);
});

您正在parseJson函数中使用gmap变量。但它是在load()函数内部声明的。它们不共享范围。只需将gmap声明移到两个函数之外,使其处于两个函数的共同作用域中。

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