【问题标题】:Load Google places asynchronously异步加载 Google 地方
【发布时间】:2013-06-12 12:13:50
【问题描述】:

由于我要在移动应用中使用谷歌地图和地点,我不希望任何东西减慢应用加载速度。

我发现在边缘网络上,我的应用程序启动速度非常慢。我所有的 js 都是本地的,所以只有谷歌地图和地点需要很长时间才能加载(如果我从 html 文件中删除地图和地点,加载速度很快)。

index.html
<script>....</script>
<script src='http://maps.google.com/maps/api/js?key=mykey&amp;sensor=false'></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&amp;sensor=false"></script>
</body>

我在Load google maps v3 dynamically with ajax找到了如何异步下载谷歌地图:

$.getScript("http://maps.google.com/maps/api/js?key=mykey&sensor=false&async=2&callback=MapApiLoaded", function () {});

function MapApiLoaded() {
   $.ajaxSetup({async:false});
   $.getScript("http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false");
   $.ajaxSetup({async:true});
   alert('loading places done');
}

我收到警报并检查 $.getScript() 是否成功返回,但是当我尝试使用地点时,我在 javascript 控制台中收到以下错误:谷歌地图地点未定义。

我尝试只在 html 文件中添加位置并异步加载 Google 地图,但它也不起作用。

有什么想法吗?提前谢谢你。

【问题讨论】:

    标签: jquery google-maps-api-3 google-places-api


    【解决方案1】:

    您加载了两次 Maps API。只需执行一次,包括地点库:

    $.getScript("http://maps.google.com/maps/api/js?key=mykey&libraries=places&sensor=false&callback=MapApiLoaded");
    
    function MapApiLoaded() {
        alert('loading Maps API and Places library done');
    }
    

    【讨论】:

    • 非常感谢。其实我还有一个问题。 MapApiLoaded 在 Google Maps 已加载且工作正常时被调用。是否知道 Places 库也加载时是否触发了事件?
    • 我在这里添加了一个问题:stackoverflow.com/questions/17135608/…
    • 嗯...我的印象是所有库都会在调用回调之前加载。如果我在MapApiLoaded 的开头执行console.log( google.maps.places );,则表明该对象存在。但我猜当时可能只加载了库的一个存根,而不是完整的库?
    • 我还想问一下您的 Maps API URL 中的 async=2。我在 V3 Maps API 中没有看到该参数;你有参考吗?我看过used with the V2 API
    • 我从某人的代码中复制了 async=2。我删除了它,它并没有改变任何东西——我还发现它没有记录。我找到了解决问题的方法并将其发布在这里:stackoverflow.com/questions/17135608/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多