0

У меня есть веб-сайт, на котором используется карта google. Данные маркеров для карты google извлекаются с сервера с помощью ajax. Я использую markerclusterer для ограничения количества маркеров, которые появляются на карте сразу. В Chrome, если возвращается более 30 маркеров, карта google пуста. Карта отлично работает в Firefox и Internet Explorer. Любые идеи о том, что происходит не так?Карты Google не отображают маркеры из ajax с помощью markercluster в Google Chrome

На странице с проблемой providersguide.com/index1.php введите любой выбор из раскрывающегося меню и нажмите «Поиск» для загрузки данных маркеров.

Это только проблема в Google Chrome. Я использую версию 44 Chrome.

+1

У меня есть 2 проблемы с попыткой его использования в Chrome: 1: GET http://providersguide.com/markercluster.js 404 (не найдено) 2: Uncaught SyntaxError: Неожиданный токен ILLEGAL (xmlhttp.onreadystatechange @ index1.php: 69) – duncan

+0

Я не знаю, почему markercluster.js будет 404 (Not Found). Он по-прежнему кластеризует маркеры, когда возвращается несколько маркеров. –

+0

Может ли возникнуть проблема с размером вывода из сценария ajax? Мой скрипт может вернуть около 500 маркеров. –

ответ

1

Источником проблемы является установка 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)

Смежные вопросы