JS说我有一个未定义的对象。可以尝试使用一些帮助搞清楚这一点

时间:2012-03-16 22:32:13

标签: javascript json google-api

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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