Google 的 AutocompleteService 和 Autocomplete 使用相同的查询返回不同的结果

Posted

技术标签:

【中文标题】Google 的 AutocompleteService 和 Autocomplete 使用相同的查询返回不同的结果【英文标题】:Google's AutocompleteService and Autocomplete returning different results with same query 【发布时间】:2017-05-08 09:59:59 【问题描述】:

我有以下查询,这是一个邮政编码: 11368.

当我创建一个自动完成对象(不是服务)时,我会在顶部获得邮政编码的实际区域:

这是代码:

  autocomplete = new google.maps.places.Autocomplete(
       document.getElementById('PlaceSearch'),
        types: ['(regions)'] );
       [...]

这正是我想要的。但是,出于设计原因,我需要在站点上使用自定义自动完成系统,因此我已移至 AutocompleteService,这是同一事物的非 UI、仅代码版本(至少应该如此)。我创建了我的自动完成服务:

x = new google.maps.places.AutocompleteService();

我使用:

 x.getQueryPredictions( input: key , function (results, status) 
 if (status == google.maps.places.PlacesServiceStatus.OK) 
           [...]
    );
);

但是,这是我从结果中得到的:

我使用description 属性来显示条目,但这不是问题,因为返回位置中第一个条目的位置 ID 也完全不同,即使我输入的查询完全相同。

我也试过了:

x.getQueryPredictions( input: key, types: ['(regions)'] ,

x.getQueryPredictions( input: key, types: ['(geocode)'] ,

x.getQueryPredictions( input: key, types: ['geocode']

然而它根本没有任何的效果。完全一样。我也见过Different result between google maps Autocomplete and AutocompleteService,但它的答案回答了typeahead 级别的问题,而我的查询结果在API 级别不正确,甚至没有提前输入;我已经直接从自动完成服务的回调函数中使用调试器对其进行了检查。

然后我检查了两种情况下的网络请求,这是正在处理的请求:

https://maps.googleapis.com/maps/api/place/js/AutocompletionService.GetPredictions?1s11368&4sen-US&9s(regions)&15e3&key=XXXXXX&callback=_xdc_._qxy1y2&token=45006

它返回正确的 JSON。

这是返回错误 JSON 的请求:

https://maps.googleapis.com/maps/api/place/js/AutocompletionService.GetQueryPredictionsJson?1s11368&4sen-US&9s(regions)&15e3&key=XXXXXX&callback=_xdc_._38p24d&token=20471

它返回不正确的 JSON。从我所看到的很明显,我需要将(regions) 作为types 参数传入,但它仍然不正确。更荒谬的是,这两个查询之间的唯一区别是一个名为 token 的变量(我尝试用正确的查询的令牌替换不正确的查询的令牌,但我有 The Google Maps javascript API must be downloaded directly from Google's servers. 错误)和回调函数,我是当然与返回的 JSON 无关。我能想到的唯一一件事是谷歌在其服务器上在初始化级别做一些事情,同时返回绑定到该服务器/实例的令牌(因此是令牌)。

我做错了什么?如何以编程方式使用 Google 自己的 typeahead 实现获得相同的结果?

【问题讨论】:

【参考方案1】:

我找到了解决方案。我打电话给getQueryPredictions 而不是getPredictions,它返回了不同的结果。我已将代码更改为调用getPredictions,它开始正常工作。

【讨论】:

AutocompletegetPlacePredictions有什么区别

以上是关于Google 的 AutocompleteService 和 Autocomplete 使用相同的查询返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

在google drive使用google.colab云服务

URL www.google.com / google 被重定向到不同的 URL www.google.co.in [关闭]

google服务框架是啥 google服务框架有啥用

使用 Google 表单更新现有的 Google 表格

Google Cloud 的使用

google.com 不能访问,会自动跳到google.ca