2016-12-22 49 views
7

Tôi có truy vấn theo dõi, là mã ZIP: 11368.AutocompleteService và Tự động điền của Google trả về các kết quả khác nhau với cùng một truy vấn

Khi tôi tạo ra một đối tượng autocomplete (không phải là dịch vụ) Tôi nhận được khu vực thực tế mã zip của ở đầu trang:

enter image description here

Đây là mã:

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

Đây là chính xác những gì tôi muốn. Tuy nhiên, tôi cần phải sử dụng một hệ thống tự động hoàn chỉnh tùy chỉnh trang web vì lý do thiết kế vì vậy tôi đã chuyển sang AutocompleteService là phiên bản không phải giao diện người dùng, chỉ có mã của cùng một điều (ít nhất nó nên là). Tôi tạo ra dịch vụ autocomplete của tôi:

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

Và tôi sử dụng:

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

Tuy nhiên, đây là những gì tôi nhận được từ các kết quả:

enter image description here

Tôi đang sử dụng description thuộc tính để hiển thị mục nhập, mặc dù nó không phải là vấn đề như ID địa điểm của mục nhập đầu tiên trong loca được trả về tions hoàn toàn khác nhau mặc dù tôi đang gõ chính xác cùng một truy vấn.

Tôi cũng đã thử:

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

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

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

Tuy nhiên nó không có bất kỳ hiệu lực ở tất cả. Nó hoàn toàn giống nhau. Tôi cũng đã thấy Different result between google maps Autocomplete and AutocompleteService nhưng câu trả lời của nó là câu trả lời cho câu hỏi ở cấp độ typeahead trong khi kết quả tại truy vấn của tôi không chính xác ở cấp API mà thậm chí không cần đánh máy; Tôi đã kiểm tra nó với một trình gỡ lỗi tại hàm gọi lại trực tiếp từ dịch vụ tự động hoàn tất.

Tôi đã sau đó kiểm tra các yêu cầu mạng ở cả hai trường hợp và đây là yêu cầu tại làm việc trên:

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

Nó trả về JSON đúng.

Đây là yêu cầu mà trả về JSON không đúng:

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

Và nó trả về JSON không chính xác. Từ những gì tôi thấy rõ ràng là tôi cần phải nhập số (regions) làm thông số types và thông số vẫn không chính xác. Ngớ ngẩn hơn, sự khác biệt duy nhất giữa hai truy vấn là một biến được gọi là token (Tôi đã thử thay thế mã thông báo của truy vấn không chính xác bằng mã xác thực nhưng tôi có lỗi The Google Maps JavaScript API must be downloaded directly from Google's servers.) và hàm gọi lại mà tôi chắc chắn không có gì để làm với JSON trả về.Điều duy nhất tôi có thể nghĩ về điều đó là Google thực hiện điều gì đó ở mức khởi tạo trên các máy chủ của nó trong khi trả lại mã thông báo, ràng buộc với máy chủ/cá thể đó (do đó mã thông báo).

Tôi đang làm gì sai và làm cách nào tôi có thể nhận được kết quả tương tự với triển khai thực hiện đánh máy của chính Google theo cách lập trình?

Trả lời

2

Tôi đã tìm thấy giải pháp. Tôi đã gọi số getQueryPredictions thay vì getPredictions và nó đã trả về các kết quả khác nhau. Tôi đã thay đổi mã của tôi để gọi getPredictions và nó bắt đầu hoạt động chính xác.

Các vấn đề liên quan