Источником проблемы является установка innerHTML, там, кажется, размер предела в Chrome см innerHTML size limit
Результат недействителен JS-кода.
Решение:
Эта линия:
eval(document.getElementById("mapgen").innerHTML);
не будет иметь желаемого эффекта. Запрос выполняется асинхронно, в тот момент, когда эта строка будет выполнена, ответ еще не доступен, внутреннийHTML #mapgen пуст, ничего не будет сделано.
В принципе, вам не нужно использовать eval
, потому что скрипт будет выполнен автоматически, если вы установите innerHTML.
Но если вы не можете установить innerHTML из-за размера eval()
responseText
непосредственно (в onreadystate
-callback):
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)
У меня есть 2 проблемы с попыткой его использования в Chrome: 1: GET http://providersguide.com/markercluster.js 404 (не найдено) 2: Uncaught SyntaxError: Неожиданный токен ILLEGAL (xmlhttp.onreadystatechange @ index1.php: 69) – duncan
Я не знаю, почему markercluster.js будет 404 (Not Found). Он по-прежнему кластеризует маркеры, когда возвращается несколько маркеров. –
Может ли возникнуть проблема с размером вывода из сценария ajax? Мой скрипт может вернуть около 500 маркеров. –