开发者问题收集

InvalidValueError:initAutocomplete 不是 Google Places 和 Autocomplete API 函数

2016-04-21
24962

希望您能帮助我,因为我遇到了瓶颈,而且我对使用 Google 的 Places API 也还很陌生。

我暂时不会发布任何代码,因为当我即将描述的 2 部分代码单独运行时,我的代码运行良好。

除了使用 Google 提供的 Javascript 示例中的 Autocomplete API,我还使用了 Google 的 Places。

最初,我的文档底部有以下脚本:

<script src="https://maps.googleapis.com/maps/api/js?&libraries=places&callback=initAutocomplete" async defer></script>

并且此脚本位于我的文档顶部:

 <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

这给了我“您在此页面上多次包含 Google Maps API。这可能会导致意外错误。”因此在研究了这个问题之后,我将两者合并在一起,如下所示:

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

但是,现在我已经完成了这个,我收到以下错误:

InvalidValueError: initAutocomplete is not a function
TypeError: searchBox is undefined

当这些脚本未合并时,我不会收到这些错误,但后来我意识到需要 Places API 的功能停止工作。如果我删除 Autocomplete API 引用,Places 函数就会工作。

关于如何使这两者一起工作、合并它们(如图所示)并解决“不是函数”问题,您有什么想法吗?

任何建议都将不胜感激,如果您真的需要查看代码,请告诉我。

提前谢谢, Steph

3个回答

您应该只使用一次包含脚本,例如:

//maps.googleapis.com/maps/api/js?key=__API-KEY__&libraries=places

请注意,在包含脚本时省略“回调”参数。 然后在窗口加载时加载 initAutocomplete,例如:

google.maps.event.addDomListener(window, 'load', initAutocomplete);

也许您需要在 head 中包含 gmaps 脚本,否则如果您将 js 放在内联中,您会收到“google 未定义”错误。

Bobz
2016-09-19

刚刚尝试了一下,发现删除 asyc 属性可以解决这个问题。即使在使用 Google API URL 的回调函数时也是如此。

删除 async 属性是一个较小的修复方法。

ramulin
2019-12-06

只需从查询中删除 &callback=initAutocomplete ,然后在加载所有内容时在脚本中调用它。

NSukonny
2022-01-21