如果有一个catch-22,我如何加载Google的Places API和Map API?

时间:2017-02-10 03:59:46

标签: javascript api google-maps

Google Maps API要求我使用async defer加载脚本:

<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地方信息无效。

如果我删除了Map API而没有其他内容,Google地方信息就可以使用。但是,当然,Map并不起作用。

好像这已经不够麻烦了,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>

...然后既不加载(有或没有&#34; async defer&#34;。

任何解决方案?有没有人遇到过这个?我无法在Google或Stackoverflow上找到任何似乎是常见用例的答案(在表单中包含Places API自动提示位置,然后同一页面上的地图会显示这些位置)。

1 个答案:

答案 0 :(得分:0)

我无意中发现了另一个解决不同问题的帖子的答案:

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

关键是:

  

如果要异步加载API(使用async,defer,   &amp; callback = initMap),您需要放置所有依赖于API的代码   在回调函数中

只需将所有Places API功能移动到initMap中(即使它与initMap无关)完全解决了问题,现在两者都有效。

我希望这有助于将来的人们!