我有一个使用谷歌地图的网站。谷歌地图的标记数据由ajax从服务器检索。我使用markerclusterer来限制一次出现在地图上的标记数量。在Chrome上,如果返回的标记超过30个,则Google地图会显示空白。该地图在Firefox和Internet Explorer中运行良好。关于出了什么问题的任何想法?
这是一个有问题的页面providersguide.com/index1.php从下拉菜单中进行任何选择,点击搜索以加载标记数据。
这只是Google Chrome中的一个问题。我使用的是Chrome 44版本。
答案 0 :(得分:1)
问题的根源是innerHTML的设置,Chrome中似乎有一个尺寸限制,请参阅innerHTML size limit
结果是无效的js-code。
解决方案:
这一行:
eval(document.getElementById("mapgen").innerHTML);
不会产生预期的效果。请求以异步方式运行,在此行执行时,响应尚未可用,#mapgen的innerHTML为空,不会执行任何操作。
基本上您根本不需要使用eval
,因为在设置innerHTML时脚本会自动执行。
但是当你因为大小eval()
responseText
直接(在onreadystate
- 回调中)而无法设置innerHTML时:
window.onload = function()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
eval(xmlhttp.responseText);
}
}
xmlhttp.open("GET","the/desired/url",true);
xmlhttp.send();
}
但是,目前不建议加载标记的方法。 您发送表单,加载新页面并发送另一个请求以加载必须进行评估的大型脚本。
您最好通过AJAX发送表单以加载标记,而不是返回脚本返回仅带有标记属性的JSON(标记的创建可以在解析返回的JSON的循环中完成)< / p>