Google 地图:addPoints 未定义且递归过多
Google Maps: addPoints is not defined and too much recursion
如果我使用下面显示的代码:
1) 它在几秒钟内工作正常,Google 删除地图并用错误消息替换它(哎呀!错误.. 请参阅控制台日志以获取更多信息)。
2) 如果我创建一个测试文件,如 test.html,并粘贴我的代码,它可以正常工作,没有任何问题。
3) 但是如果我在我的页面中使用它它不起作用(见 1)
我使用 jquery-ui、jquery 和 fancybox.. 我删除了那些脚本并在我的页面中再次测试,同样的问题!
控制台日志显示:
addPoints 未定义
太多的递归
我的代码
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true&key=my-key" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
// Google Map Maker script v.3
// (c) 2012 Richard Stephenson http://www.rpsdigital.com
// http://mapmaker.donkeymagic.co.uk
var map;
var icon0;
var newPoints = new Array();
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function'){
window.onload = func
} else {
window.onload = function() {
oldonload();
func();
}
}
}
addLoadEvent(loadMap);
addLoadEvent(addPoints);
function loadMap() {
map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.addMapType(G_PHYSICAL_MAP);
map.enableScrollWheelZoom();
map.setCenter(new GLatLng( 46.198308213008495, 14.969000816345215), 7);
map.setMapType(G_PHYSICAL_MAP);
for(var i = 0; i < newPoints.length; i++) {
var point = new GPoint(newPoints[i][1],newPoints[i][0]);
var popuphtml = newPoints[i][4] ;
var marker = createMarker(point,newPoints[i][2],popuphtml);
map.addOverlay(marker);
}
}
function createMarker(point, icon, popuphtml) {
var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>";
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(popuphtml);
});
return marker;
}
//]]>
</script>
<div id="map" style="width:330px;height:300px"></div>
问题是,正如控制台试图告诉您的那样,addPoints 函数未定义。
为什么行为完全按照它的方式发生我不能说 - 可能是因为你的函数 loadMap 并没有真正使用 addPoints 和 addPoints(此代码中未定义的 var/reference)仅在你的 loadMap 之后被调用函数在加载事件调度时调用,因为它仅在添加 loadMap 之后添加。因此,一旦达到,代码就会停止工作。
在您的代码中,addPoints 未定义,正如我在对您的问题的评论中所写 - 我在 google 地图 api 文档中找不到它。
通过 google 搜索,我在 this SO question 中找到了 addPoints,它看起来非常像您的代码。
我猜您使用该代码或类似代码来构建您的工具,但在某个时间点删除了 addPoints 函数定义。
由于您似乎根本不使用 addPoints(它未在您的代码中定义)我建议您只删除该行
addLoadEvent(addPoints);
而且我预测问题会消失。
如果我使用下面显示的代码: 1) 它在几秒钟内工作正常,Google 删除地图并用错误消息替换它(哎呀!错误.. 请参阅控制台日志以获取更多信息)。 2) 如果我创建一个测试文件,如 test.html,并粘贴我的代码,它可以正常工作,没有任何问题。 3) 但是如果我在我的页面中使用它它不起作用(见 1)
我使用 jquery-ui、jquery 和 fancybox.. 我删除了那些脚本并在我的页面中再次测试,同样的问题!
控制台日志显示: addPoints 未定义 太多的递归
我的代码
<script src="http://maps.google.com/maps?file=api&v=2&sensor=true&key=my-key" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
// Google Map Maker script v.3
// (c) 2012 Richard Stephenson http://www.rpsdigital.com
// http://mapmaker.donkeymagic.co.uk
var map;
var icon0;
var newPoints = new Array();
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function'){
window.onload = func
} else {
window.onload = function() {
oldonload();
func();
}
}
}
addLoadEvent(loadMap);
addLoadEvent(addPoints);
function loadMap() {
map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.addMapType(G_PHYSICAL_MAP);
map.enableScrollWheelZoom();
map.setCenter(new GLatLng( 46.198308213008495, 14.969000816345215), 7);
map.setMapType(G_PHYSICAL_MAP);
for(var i = 0; i < newPoints.length; i++) {
var point = new GPoint(newPoints[i][1],newPoints[i][0]);
var popuphtml = newPoints[i][4] ;
var marker = createMarker(point,newPoints[i][2],popuphtml);
map.addOverlay(marker);
}
}
function createMarker(point, icon, popuphtml) {
var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>";
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(popuphtml);
});
return marker;
}
//]]>
</script>
<div id="map" style="width:330px;height:300px"></div>
问题是,正如控制台试图告诉您的那样,addPoints 函数未定义。
为什么行为完全按照它的方式发生我不能说 - 可能是因为你的函数 loadMap 并没有真正使用 addPoints 和 addPoints(此代码中未定义的 var/reference)仅在你的 loadMap 之后被调用函数在加载事件调度时调用,因为它仅在添加 loadMap 之后添加。因此,一旦达到,代码就会停止工作。
在您的代码中,addPoints 未定义,正如我在对您的问题的评论中所写 - 我在 google 地图 api 文档中找不到它。 通过 google 搜索,我在 this SO question 中找到了 addPoints,它看起来非常像您的代码。 我猜您使用该代码或类似代码来构建您的工具,但在某个时间点删除了 addPoints 函数定义。
由于您似乎根本不使用 addPoints(它未在您的代码中定义)我建议您只删除该行
addLoadEvent(addPoints);
而且我预测问题会消失。