Маркеры в Google Maps v3 API больше не обращаются к контенту - PullRequest
0 голосов
/ 10 февраля 2012

Я исправил проблему ниже, обновив версию API карт Google в этой строке кода:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3.9
&sensor=false"> </script>

Но теперь у меня снова та же проблема! Я снова обновил версию (до версии 3.9, которую вы видите выше), но содержимое снова не отображается в div боковой панели (см. Ниже). Я ничего не сделал с этим кодом, который был в сети с декабря 2011 года. Есть идеи, почему он вдруг перестал работать?


У меня есть приложение, которое использует карты Google v3 с php и mysql для отображения маркеров на карте. Маркеры подключаются к содержимому информационного окна при наведении курсора мыши (извлекается из базы данных), а затем отображают новое содержимое (также извлекаемое из базы данных) в боковом элементе при щелчке. Смотрите его по адресу: www.corkmemorymap.org

Все это работало нормально, а потом вдруг это не так. Боковая панель больше не отображается при нажатии. Ничего не происходит вообще. Если вы используете поиск по темам над картой, вы можете увидеть, что должно произойти (нажмите на одну из историй, которые выпадают на карту при выборе темы).

Код для этой страницы основан на документе Google maps здесь: http://code.google.com/apis/maps/articles/phpsqlajax_v3.html
Я использую функцию php echo для XML-файла (это потому, что у хостинговой организации есть старая версия php).

Я добавил эту функцию, чтобы содержимое боковой панели появлялось при клике:

function contentBox(marker, map, sidebar, winHtml, infoWindow) {
    google.maps.event.addListener(marker, 'click', function() {
    document.getElementById('sidebar').innerHTML=winHtml;
    /*closes the info window when users clicks the marker 
    and launches the content*/
    infoWindow.close(map, marker);

    });
}

Он находится внутри большей функции ajax и также вызывается внутри этой функции.

о, и это переменная winHtml:

var winHtml =
      '<!DOCTYPE html>' +
      '<head>' +
      '<link rel="stylesheet" href="mapstyle4.css">' +
      '</head>' +
      '<body>' +
      '<div id="sidebar">' + '<h2>' + ph_title + '</h2>' 
        + '</header>' +
      '<div id="photos">' +
      '<img width="220" src="'+ph_web+'"/>' +
      '</div>' +
      '<div id="trans">' + trans_xcrpt +
      '</div>' +
      '<div id="audio">' +
      '<audio autoplay="autoplay" controls="controls">' +
      '<source src="'+audio_ogg+'" type="audio/ogg">' +
      '<source src="'+audio_mp3+'" type="audio/mpeg">' +
      '</audio>' +
      '</div>' +
      '</body>' +
      '</html>';

Я также протестировал это локально (на моем MAMP), и там тоже не работает, что говорит о том, что это что-то изменилось в Google. Но что? Как узнать, что изменилось, чтобы я мог скорректировать свой код? Это случилось с кем-то еще? Без сообщений об ошибках и кода, который работал нормально в течение 6 месяцев, а затем внезапно, я не теряюсь в поиске неисправностей.

1 Ответ

1 голос
/ 10 февраля 2012

В вашей ссылке на DOM в строке 128 вашей страницы есть ошибка, которая приводит к следующей ошибке JS:

TypeError: 'null' is not an object (evaluating 'document.getElementById('infoWindow').parentNode')

В вашем коде также есть разрыв строки в строке 128.

Я предлагаю удалить ссылку на parentnode, чтобы ваш код выглядел так:

document.getElementById('infoWindow').style.overflow = 'visible';

Мне удалось заставить боковую панель появляться при щелчке маркера, как только я установил JS, как описано.

...