谷歌地图不会在Google Chrome中使用markercluster从ajax渲染标记

时间:2015-07-29 15:42:35

标签: google-maps google-chrome google-maps-markers markerclusterer

我有一个使用谷歌地图的网站。谷歌地图的标记数据由ajax从服务器检索。我使用markerclusterer来限制一次出现在地图上的标记数量。在Chrome上,如果返回的标记超过30个,则Google地图会显示空白。该地图在Firefox和Internet Explorer中运行良好。关于出了什么问题的任何想法?

这是一个有问题的页面providersguide.com/index1.php从下拉菜单中进行任何选择,点击搜索以加载标记数据。

这只是Google Chrome中的一个问题。我使用的是Chrome 44版本。

1 个答案:

答案 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>