Рендеринг только 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>';
          }
    });
}

(или добавьте предупреждение, если вы не возражаете, нажимая на все всплывающие диалоговые окна)

Другие вопросы по тегам