javascript - 如何在 Google Place AutoComplete API 上添加会话令牌
问题描述
我有一个用于地址搜索的输入,它调用 google API 进行自动完成。它有效,但我想在查询中添加会话令牌,但我不知道该怎么做。
我在互联网上到处搜索,但只看到:“使用 var sessionToken = new google.maps.places.AutocompleteSessionToken(); 生成会话令牌”。好的,但我不知道把这个变量放在哪里:/
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=places&key=MY_API_KEY"></script>
<form>
<label>Address</label>
<input id="user_input_autocomplete_address" placeholder="Votre adresse...">
</form>
<script>
function initializeAutocomplete(id) {
var element = document.getElementById(id);
if (element) {
var autocomplete = new google.maps.places.Autocomplete(element, { types: ['address'] });
autocomplete.setComponentRestrictions({'country': ['fr']});
google.maps.event.addListener(autocomplete, 'place_changed', onPlaceChanged);
}
}
function onPlaceChanged() {
var place = this.getPlace();
console.log(place);
for (var i in place.address_components) {
var component = place.address_components[i];
for (var j in component.types) {
var type_element = document.getElementById(component.types[j]);
if (type_element) {
type_element.value = component.long_name;
}
}
}
}
google.maps.event.addDomListener(window, 'load', function() {
initializeAutocomplete('user_input_autocomplete_address');
});
</script>
它正在工作,我有自动完成功能,但这个脚本不使用唯一的会话令牌。因此,对于输入中键入的每个字母,每个查询都使用不同的查询。
解决方案
您正在使用自动处理会话的自动完成小部件。您无需根据Google 的文档自行生成会话。
如果你想使用这个AutocompleteService
类,是的,你需要使用google.maps.places.AutocompleteSessionToken()
. 请参阅上面链接中的 Google 代码示例,了解添加方式/位置:
// Create a new session token.
var sessionToken = new google.maps.places.AutocompleteSessionToken();
// Pass the token to the autocomplete service.
var autocompleteService = new google.maps.places.AutocompleteService();
autocompleteService.getPlacePredictions({
input: 'pizza near Syd',
sessionToken: sessionToken
},
displaySuggestions);
希望这可以帮助!
推荐阅读
- spatial - 用作 as.linnet 对象的数据框对象
- mongodb - mongo db需要遍历数组中的每个元素并转换底层类型
- asp.net - 显示引导模型以创建具有某些参数的表单
- c# - 在 C# 中将当前 DateTime 秒和毫秒设置为 0
- python - 我如何通过请求在 django 中获取当前状态或 http 代码
- c++ - 为什么我的程序无法正确读取二进制文件?
- openshift - 如何在 openshift 3.11 中创建非管理员用户?
- java - Log4j2 替代 monitorInterval="30"
- c - 计算算术数组下标表达式作为 C 中条件运算符操作数的一部分
- java - @Autowired 不注入 Mongodb 存储库或服务 -nullPointerException-