2017-02-10 7 views
-1

API Карт Google требует от меня, чтобы загрузить скрипт с асинхронным DEFER:Как я могу загрузить API и API карт Google, когда есть catch-22?

<script async defer 
src="https://maps.googleapis.com/maps/api/js?key=[MY_KEY]&callback=initMap"> 
</script> 

Между тем, Google Places API требует от меня, чтобы загрузить сценарий обычно:

<script src="https://maps.googleapis.com/maps/api/js?key=[MY_KEY]&v=3.exp&sensor=false&libraries=places"> 
</script> 

Если оба находятся на странице, Google Места не работают.

Если я удалю API карт и ничего больше, Google Адреса будет работать. Но, конечно, карта не работает.

Как будто это еще не достаточно хлопотно, Google жалуется на консоль, что я загружаю их API дважды. Справедливо, но если я совмещаю запрос:.?

<script async defer 
src="https://maps.googleapis.com/maps/api/js?key=[MY_KEY]&callback=initMap&v=3.exp&sensor=false&libraries=places"> 
</script> 

... то ни нагрузки (с или без «асинхронного DEFER»

Любых решений Кто-нибудь, прежде чем запустить в это я не могу? найти любые ответы на Google или Stackoverflow для того, что, по-видимому, является обычным прецедентом (наличие мест расположения автозагрузчиков Places в форме, а затем карта на той же странице показывает эти местоположения).

+0

Комбинированная нагрузка должна работать (с 'async defer' и обратным вызовом или без' async defer' ** и ** без параметра обратного вызова, но с другим механизмом для запуска функции initMap. Пожалуйста, предоставьте [mcve], демонстрирующий проблему. – geocodezip

+0

На самом деле, ответ заключается в том, что если вы используете initMap И комбинированный запрос (оба из которых являются обязательными, так или иначе), то вам нужно включить все функции в initMap. http://stackoverflow.com/questions/40403251/getting-uncaught-referenceerror-google-is-not-defined-error-using-google-maps – MattWithoos

ответ

0

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

Getting "Uncaught ReferenceError: google is not defined" error using Google Maps API

Ключ был:

Если вы загружаете API асинхронно (с асинхронным, отложить, & обратного вызова = initMap), вам нужно поместить весь код, который зависит от API внутри функция обратного вызова

Просто переместив все функциональные возможности API Places в initMap (хотя это и не имело ничего общего с initMap) полностью решила проблему, и теперь оба они работают.

Я надеюсь, что это поможет людям в будущем!