随机获取OpenLayers.Layer.OSM.Mapnik不是构造函数

时间:2011-03-21 16:47:20

标签: openlayers openstreetmap

我有一个小的弹出窗口,我在用户点击页面上的链接时加载。但大约一半的时间,我在firebug的console.log中得到“OpenLayers.Layer.OSM.Mapnik不是构造函数”。如果我关闭弹出窗口(这是一个jqueryui对话框),然后再次单击该链接,它可能不会出错。但如果我关闭它并再次打开它我再次得到错误。这很奇怪。

如果我完全刷新页面,我会在第一次点击时收到错误但关闭然后我会得到地图。

在我错过的较小窗口中加载地图有什么秘密吗?我不会在不同页面上的地图全屏版本中收到错误...

以下是加载地图的代码:

var map = undefined,
popup = undefined;

function initialize (){
    var center_lat = "39.828175";
    var center_long = "-98.579500";
        OpenLayers.ImgPath = "/images/openlayers/";
    map = new OpenLayers.Map ("map", {
        controls:[
            new OpenLayers.Control.Navigation(),
            new OpenLayers.Control.PanZoomBar()],
        });
    var scalebar = new OpenLayers.Control.ScaleBar({displaySystem: "english",align: "right"});// this is an external library that is loaded as a js file and works great on the full screen map too....
    map.addControl(scalebar);

    layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Open Street Maps");
    map.addLayer(layerMapnik);
    lonLat = OLL(center_long, center_lat);
    map.setCenter (lonLat, 13);
}

1 个答案:

答案 0 :(得分:0)

可能是在完全加载了OSM构造函数的js文件之前执行代码。如果您在执行代码之前不等待document.onReady事件,这很常见。第一次加载页面时,从服务器请求js文件,加载几十分之一秒,使得在页面代码中使用时间太晚。第二次缓存js代码,使其可以访问页面代码。

什么时候调用initialize()函数?