2016-12-22 6 views
7

다음 쿼리 (우편 번호는 11368)입니다. 나는 자동 완성 객체 (안 서비스) 내가 맨 위에있는 우편 번호의 실제 지역을 얻고을 만들 때Google의 AutocompleteService 및 Autocomplete가 동일한 검색어로 다른 결과를 반환합니다.

는 :

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

이는 다음과 같습니다

enter image description here

이 코드입니다 정확히 내가 원하는 것. 그러나, 나는 사용자 정의 자동 완성 시스템을 설계상의 이유 때문에 현장에서 사용해야하므로 동일한 UI가 아닌 코드 전용 버전 인 AutocompleteService으로 이동했습니다 (최소한 반드시 있어야 함). 내 자동 완성 서비스를 만들 :

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

을 그리고 사용

enter image description here

내가 description을 사용하고 있습니다 :

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

그러나,이 내가 결과에서 무엇을 얻을 속성을 사용하면 항목을 표시 할 수 있지만 반환 된 loca의 첫 번째 항목의 장소 ID는 문제가 아닙니다. 비록 정확히 동일한 쿼리를 타이핑하더라도 tions는 완전히 다릅니다.

가 나는 또한 시도했다 :

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을 반환합니다. 내가 알기로 을 types 매개 변수로 전달해야하며 이는 여전히 잘못된 것입니다. 더 우스꽝 스럽지만 두 쿼리의 유일한 차이점은 token이라는 변수입니다 (잘못된 쿼리의 토큰을 올바른 것으로 바꾸려고 시도했지만 The Google Maps JavaScript API must be downloaded directly from Google's servers. 오류가 있음). 콜백 함수는 아무 것도 없습니다. 반환 된 JSON과 관련있다.내가 생각할 수있는 유일한 것은 구글이 서버의 초기화 레벨에서 서버/인스턴스 (따라서 토큰)에 바인딩 된 토큰을 반환하는 동안 서버에서 뭔가를 수행한다는 것입니다.

무엇이 잘못 되었습니까? Google 자체의 선행 기입 구현으로 프로그래밍 방식으로 동일한 결과를 얻으려면 어떻게해야합니까?

답변

2

해결책을 찾았습니다. 나는 getPredictions 대신에 getQueryPredictions라고 부르고 다른 결과를 내고있었습니다. 코드를 변경하여 getPredictions을 호출하면 제대로 작동하기 시작합니다.

관련 문제