2016-12-22 13 views
7

次のクエリがあります。これは郵便番号: 11368です。Googleのオートコンプリートサービスとオートコンプリートが同じクエリで異なる結果を返す

私が先頭に郵便番号の実際の地域を取得していますオートコンプリートのオブジェクト(ないサービス)を作成します。

enter image description here

これはコードです:

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) { 
      [...] 
    }); 
}); 

しかし、これは私が結果から得るものです:

enter image description here

私はdescriptionを使用していますプロパティを使用してエントリを表示しますが、返されるlocaの最初のエントリの場所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を返します。

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

そして、それは正しくないJSONを返します。ここでは

が不正JSONを返す要求です。私が見るところでは、をtypesというパラメータとして渡す必要がありますが、それでも間違いはあります。より不条理なことに、2つのクエリの唯一の違いは、tokenという変数です(私は間違ったクエリのトークンを正しいものに置き換えようとしましたが、The Google Maps JavaScript API must be downloaded directly from Google's servers.というエラーが出ています)とコールバック関数には何もありません返されたJSONを処理します。私が考えることができるのは、Googleがサーバ上の初期化レベルで何かをしている間に、そのサーバ/インスタンス(したがってトークン)に結びついたトークンを返す間だけだと思います。

私は何が間違っていますか、Google独自の先読み実装でプログラム的に同じ結果を得るにはどうすればよいですか?

答えて

2

解決策が見つかりました。私はgetPredictionsの代わりにgetQueryPredictionsと呼んでいましたが、別の結果が返ってきました。コードを変更してgetPredictionsに電話し、正しく動作するようになりました。

関連する問題