Рендеринг только 10 результатов поиска, когда есть хотя бы 20? Использование Google Places API
У меня проблема в том, что я выполняю радиолокационный поиск в Google Адреса, который возвращает не менее 20 результатов. В моем коде я ограничиваю количество результатов поиска до 20. Поэтому на моей встроенной карте Google должно быть не более 20 маркеров (эта часть работает) и связанный список из 20 мест на панели результатов (это не так). т работа). Тем не менее, я постоянно получаю только 10 результатов на панели результатов. Вот мой код, выполняющий поиск радара и функцию addResult в обратном вызове (так как он асинхронный):
function getPlaces(placeQuery, locInput){
var location = new google.maps.LatLng(locInput.geometry.location.lat(), locInput.geometry.location.lng());
var queryValue = placeQuery.value;
var resultsLength;
var request = {
location: location,
radius: 3200,
keyword: queryValue
};
service = new google.maps.places.PlacesService(map);
service.radarSearch(request, function callback(results, status) {
if(status == google.maps.places.PlacesServiceStatus.OK) {
clearMarkers();
if(results.length < 20){
resultsLength = results.length;
}
else{
resultsLength = 20;
}
for (var i = 0; i < resultsLength; i++){
var markerLetter = String.fromCharCode('A'.charCodeAt(0)+ i);
var markerIcon = MARKER_PATH + markerLetter + '.png';
markers[i] = new google.maps.Marker({
position: results[i].geometry.location,
animation: google.maps.Animation.DROP,
icon: markerIcon
});
markers[i].placeResult = results[i];
google.maps.event.addListener(markers[i], 'click', showInfoWindow);
setTimeout(dropMarker(i), i * 100);
addResult(results[i], i);
}
}
});
}
Вот моя функция addResult:
function addResult(place, i) {
var name;
var address;
var results = document.getElementById("results");
service.getDetails({placeId: place.place_id}, function(result, status) {
if (status !== google.maps.places.PlacesServiceStatus.OK) {
return;
}
results.innerHTML += '<li>' + result.name + '</li>';
});
}
Я провел некоторое отладочное тестирование, и цикл for выполняется полностью. Однако в service.getDetails в функции addResult проходят только 10 идентификаторов мест. Не уверен почему... Примечание: не могу использовать библиотеки jQuery или обещания и т.д.
1 ответ
Для звонков на .getDetails
запрос. Вы молча терпите неудачу, если результат не "ОК", добавьте обработку ошибок, и вы увидите проблему.
function addResult(place, i) {
var name;
var address;
var results = document.getElementById("results");
service.getDetails({placeId: place.place_id}, function(result, status) {
if (status !== google.maps.places.PlacesServiceStatus.OK) {
results.innerHTML += '<li>'+ status + '</li>';
} else {
results.innerHTML += '<li>' + result.name + '</li>';
}
});
}
(или добавьте предупреждение, если вы не возражаете, нажимая на все всплывающие диалоговые окна)