我的页面代码
<div class="searchField">
<input id="searchLocation" name="searchLocation" type="text" placeholder="Enter an Address">
</div>
<!-- more code.... -->
<!-- footer -->
<script>
// initiate search area for autocomplete of places from Google Maps Street Addresses
function initAutocomplete() {
// define the search location box
var searchBox = $("#searchLocation")[0];
// initiate the autocomplete with the options on the search box
var autocomplete = new google.maps.places.Autocomplete(searchBox, options);
};
</script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places®ion=ca&language=en&key= [YOUR_API_KEY]&callback=initAutocomplete" async defer>
</script>
会话令牌说明
根据谷歌文档(一直在页面底部的“警告文本”中)......
https://developers.google.com/maps/documentation/javascript/places-autocomplete
警告:确保为每个新会话传递一个唯一的会话令牌。对多个会话使用相同的令牌将导致每个请求单独计费。请注意,自动完成小部件会自动处理会话(您无需执行任何其他操作)。现在,让我们深入了解基本的 Javascript 示例。
这可能有点令人困惑,只是因为你试图进入谷歌文档的命名法以及这些东西的含义,可能是因为你以一种方式做这件事,突然你的老板或客户或其他人要求你使用 Sessions/Session代币。如果您这样做new google.maps.places.Autocomplete()
而不是AutocompleteServices
按照这些思路进行操作,则您正在使用“自动完成小部件”。自动完成小部件将自己处理会话/会话令牌。
证明给我看!
我相信谷歌和谷歌开发者文档关于他们自己的产品以及他们如何/做什么,但网络上有很多关于这一点的困惑。所以我想要证明,除了一个月后收到账单。仅供参考 - Google Cloud Platform Console ( https://console.cloud.google.com/google/maps-apis?pli=1 ) 中的计费将几乎立即向您显示这一点,并将证实以下和以上的内容。
查看开发工具中的网络活动,我们看到有一些对自动完成服务的调用。
我在这里没有使用“AutocompleteService”功能,这是一个基本示例设置,与我上面列出的回调相同,通过new google.maps.places.Autocomplete()
.
当你进入页面时,你可以首先看到对库的调用,下面是 Dev Tools 的第一个截图。
接下来我做了一个搜索,它有效。我开始输入 1990 年的基本地址,之后您可以看到向 API 发出的 4 个请求。我输入的每个字符都有 1 个请求/调用。这些请求名称中的每一个都以“AutocompleteServices.GetPredictions...”开头,即使我没有在我的代码中使用 AutocompleteServices。在后端,“自动完成小部件”使用“自动完成服务”并为您完成所有 UI/UX 工作以及功能、会话和令牌。这些在下面的开发工具屏幕截图 #1-#3 中。
然后您会看到对“PlaceServces.GetPlaceDetails”的第 5 次请求调用,这是我从下拉列表中选择的时候。这是下面的开发工具屏幕截图#4。查看标题,对于每个请求,我看到了一些东西。在底部圈出的第一件事是“令牌”。我知道我刚刚说过,Google 文档刚刚说过“自动完成小部件”处理会话令牌,敏锐的眼睛会看到这个“令牌”值对于每个请求都是不同的。它也不是谷歌推荐的“版本 4 UUID”格式,但这是一个不同的主题。标题中的这个“令牌”,不是会话令牌。这隐藏在 Google Docs 上此版本的先前版本的 5 年前的文档中,但这不再使用,并且为每个请求自动设置,而不是会话令牌。所以,“那么会话令牌在哪里?” 你可能会问。
标头中以 1s、2s 等开头的其他项是传递的不同会话变量。在这种情况下,会话令牌是“20s”,后跟“自动完成小部件”自动创建的版本 4 UUID。敏锐的眼睛还会注意到,对于下面的 3 个屏幕截图,它们是相同的。页面刷新后,我有第五个屏幕截图,显示会话令牌已更改。您可以在我的代码中看到我没有指定这些内容,但是因为我使用的是“自动完成小部件”,所以它们是为我完成的。




