2017-02-10 29 views
-1

谷歌地圖API需要我用異步延遲加載腳本:在catch-22時如何加載Google的Places API和Map API?

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

與此同時,谷歌Places API的要求我可以正常加載腳本:

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

如果兩者的頁面,谷歌地方不起作用。

如果我刪除了地圖API,沒有別的,谷歌Places運作。但是,當然,地圖不起作用。

如果這是不是已經夠麻煩,谷歌抱怨在我加載它們的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> 

...然後既不負載(帶或不帶「異步延遲」

的任何解決方案,有沒有人碰到這個我不能?發現在谷歌或#2的任何答案,什麼似乎是一個常見的用例(具有在形式Places API的自動提示的位置,然後在同一頁面顯示在地圖的位置)。

+0

將合併的負載應工作(用'異步defer'和回調或不'異步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 內的所有代碼回調函數

只需將所有Places API功能移動到initMap中(即使它與initMap無關),完全解決了問題,現在兩者都可以工作。

我希望這有助於人們在未來!