InvalidValueError:initAutocomplete 不是 Google Places 和 Autocomplete API 的功能

Posted

技术标签:

【中文标题】InvalidValueError:initAutocomplete 不是 Google Places 和 Autocomplete API 的功能【英文标题】:InvalidValueError: initAutocomplete is not a function Google Places and Autocomplete API 【发布时间】:2016-08-15 03:49:48 【问题描述】:

希望你能帮助我,因为我碰壁了,我对使用 Google 的 Places API 也很陌生。

我暂时不打算发布任何代码,因为当我将要描述的两部分单独运行时,我的代码可以正常工作。

除了使用 Google 提供的 javascript 示例的自动完成 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 函数就会起作用。

有什么想法可以让这两者一起工作,如图所示合并它们并解决“不是函数”问题吗?

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

提前致谢, 斯蒂芬

【问题讨论】:

【参考方案1】:

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

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

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

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

如果您将 js 内联,您可能需要在 head 中包含 gmaps 脚本,否则您会收到“google is not defined”错误。

【讨论】:

是的,这行得通!如果您希望 JavaScript 在您的外部 JS 文件中,而不是在 html/php 页面中(如示例),这很好用。删除回调,在您的 JS 中添加 dom 侦听器。像梦一样工作!但是不要忘记 geolocate() onFocus ...您还需要将其移至外部 JS ... 我在 WordPress 中使用它时遇到了同样的问题,但我注意到只有当我的自动完成功能写在 JQuery onload 函数中时才会发生这种情况,所以我把它移走了。我还没有测试 vanilla js 的 onload 函数,但它通常应该是相同的方法。 这个解决方案对我有用。就我而言,我也从 Maps API 脚本标签中删除了 async attr。 这是唯一对我有用的东西【参考方案2】:

刚试了一下,发现去掉asyc属性可以解决这个问题。即使在 Google API URL 上为 Places 使用回调时也是如此。

删除asyc 属性是一个较小的修复。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于InvalidValueError:initAutocomplete 不是 Google Places 和 Autocomplete API 的功能的主要内容,如果未能解决你的问题,请参考以下文章

为啥这不是 google.maps.Map 的地图实例? InvalidValueError:setMap:不是 Map 的实例;

错误:InvalidValueError:setCenter:不是 LatLng 或 LatLngLiteral:在属性 lat:不是数字

InvalidValueError:initAutocomplete 不是 Google Places 和 Autocomplete API 的功能

未捕获的 InvalidValueError:不是 Feature 或 FeatureCollection

如何修复Uncaught InvalidValueError:setPosition:不是LatLng或LatLngLiteral:在属性lat中:不是数字?

错误:InvalidValueError:setCenter:不是LatLng或LatLngLiteral:在属性lat中:不是数字