随机获取 OpenLayers.Layer.OSM.Mapnik 不是构造函数
我有一个小的弹出窗口,当用户单击页面上的链接时加载该窗口。但大约一半的时间,我在 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);
}
I have a small popup window that I am loading on user click of a link on the page. But about half the time, I am getting "OpenLayers.Layer.OSM.Mapnik is not a constructor" in the console.log of firebug. If I close the popup (which is a jqueryui dialog) and then click the link again, it likely won't error. But if I close it and open it again I get the error again. It's very strange.
If I completely refresh the page, I get the error on the first click but close and then I get the map.
Is there some secret to loading the map in a smaller window that I am missing? I don't get the error in the full screen version of the map on a different page...
Here's the code that loads the map:
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);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能在带有 OSM 构造函数的 js 文件完全加载之前执行代码。如果您在执行代码之前不等待 document.onReady 事件,则这种情况很常见。第一次加载页面时,会从服务器请求 js 文件,加载需要零点几秒,因此无法在页面代码中使用。第二次缓存js代码,使其可供页面代码访问。
你什么时候调用你的initialize()函数?
It could be that you execute your code before the js file with the OSM constructor has loaded completely. This is common if you don't wait for the document.onReady event before executing your code. The first time you load the page the js file is requested from the server, taking a few tenths of a second to load, making it too late to use in the page code. The second time the js code is cached, making it accessible for the page code.
When do you call your initialize() function?