API Карт Google включался несколько раз при перезагрузке страницы с помощью AJAX с использованием API истории HTML5.

У меня есть сайт, который перемещается и перезагружает информацию о странице с помощью API истории HTML5. Это отправляет вызов AJAX, который извлекает соответствующую информацию о странице. На моей странице контактов у меня есть скрипт API карт Google. Если страница загружается путем доступа к URL-адресу, она работает нормально. Google загружает API карт и включает его перед закрывающим тегом body.

Если я уйду со страницы (используя API истории для удаления и добавления контента), а затем вернусь на страницу контактов (опять же через API истории), будет сделан второй вызов (уже включенного) API карт, и он удвоится. . Это вызывает предупреждающее сообщение в консоли.

Я попытался удалить скрипт Google Maps, добавленный перед закрывающим тегом body перед загрузкой нового контента, но поскольку скрипт был проанализирован, все соответствующие функции для карты остаются в памяти браузера.

Итак, я думаю, мой вопрос: «Есть ли способ выгрузить все карты Google Maps JS, когда я делаю запросы AJAX для содержимого страницы?».

Сообщение консоли выглядит следующим образом:

Предупреждение: вы несколько раз указывали API Карт Google на этой странице. Это может привести к непредвиденным ошибкам.


person GDW    schedule 14.01.2013    source источник
comment
Покажи нам свой сценарий. Скорее всего, вы включили несколько файлов .js, и карта загружена более одного раза. Проверьте это: stackoverflow.com/questions/9719157/   -  person gulty    schedule 14.01.2013
comment
К сожалению, хотелось бы, чтобы все было так просто. Я точно вижу, в чем проблема и почему это происходит. Если бы это было дублирующее включение, тогда произошла бы ошибка, когда я загружал страницу по URL-адресу. Но это связано с повторной загрузкой страницы через API истории, что приводит к включению дубликатов, поскольку карта уже была включена при первой загрузке. Поэтому, если я перейду к контакту 5 раз, я увижу 5 карт, добавленных перед закрывающим тегом body.   -  person GDW    schedule 14.01.2013
comment
Затем вы должны включить свой сценарий. Иначе я сомневаюсь, что кто-нибудь сможет вам помочь   -  person gulty    schedule 14.01.2013
comment
я тоже сталкиваюсь с этой проблемой. если вы нашли решение, не могли бы вы сообщить мне?   -  person DMande    schedule 30.11.2015
comment
Я предполагаю, что это вероятно правильный ответ к этому. Не уничтожайте карту...   -  person GDW    schedule 25.01.2016


Ответы (1)


Я также получаю эту ошибку, у меня есть страница, которая использует карты Google, и если я использую ajax для перезагрузки части страницы с кодом карты Google, появляется ошибка.

Обратите внимание, что мой HTML-код не дублируется, но блок html перезаписывается теми же данными, что и HTML-карты Google, и он обрабатывается так, как если бы это были два блока, а не один, как кажется. Я даже пытался использовать jquery .empty() перед вставкой блока html, но никаких изменений, все еще ошибка для нескольких. Страница не выдает ошибку при загрузке, поэтому мой единственный вывод таков.

РЕДАКТИРОВАТЬ: когда я думаю об этом, я думаю, что причина в том, что мой блок HTML содержит строку включения сценария, и даже если это только один раз в HTML, весь смысл этой строки загружает кучу кода в DOM, поэтому просто поместите ... Решение загружает скрипт только один раз - как говорит Google! дох! Просто нужно подумать, что эти строки ‹ script src=" в основном делают для DOM :) Поэтому добавьте блок JS, проверяющий, загружен ли API карт, и загружайте его только в том случае, если это не так. Подумайте о PHP. разница между include() и include_once()

person Kim Steinhaug    schedule 10.04.2017
comment
Точно, я связался с этой веткой, где кто-то объясняет, что нельзя уничтожать экземпляр. - person GDW; 26.04.2017