Google Places Api:无法显示所有搜索结果

时间:2012-10-12 09:37:46

标签: google-maps-api-3 google-places-api

我无法显示Google Places Api要求的所有结果..

var Latlng = new google.maps.LatLng(Latitute, Longitute);
        map = new google.maps.Map(document.getElementById('map_canvas'), {
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    center: Latlng,
                    zoom: 10});
        var request = {location: Latlng,types: [type]};
        var service = new google.maps.places.PlacesService(map);
        service.search(request, callback);
  }

  function callback(results,status,pagination) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
        createMarker(results[i]);
        }
        if (pagination.hasNextPage) {
         pagination.nextPage(); }}}

   function createMarker(place) {
            var placeLoc = place.geometry.location;
            var marker = new google.maps.Marker({map: map,zIndex: 100,position: place.geometry.location});
            var request = {reference : place.reference,};
            service = new google.maps.places.PlacesService(map);
            service.getDetails(request, function detailsDisplay(details, status){
                if (status === google.maps.places.PlacesServiceStatus.OK) {
                    console.log(status);
                    $('#placesdata').append('<tr><td><a href='+details.url+'>' + details.name+ '</a></td></tr>');
                } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
                    setTimeout(function() {
                    createMarker(place);
                    }, 200);}});} };

我使用分页并获得60个结果,但只能使用settimeout()函数显示20 ...和40 ...得到以下错误:未捕获的TypeError:无法读取null的属性“length”。任何线索?

2 个答案:

答案 0 :(得分:2)

您最有可能获得OVER_QUERY_LIMIT在线:

if (status == google.maps.places.PlacesServiceStatus.OK) 

因为您已经在创建标记,这会占用您的配额。

尝试在完成所有列表后排队详细信息请求,并添加相同的超时逻辑以检查此行上的google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT

例如,您可以说:

if (pagination.hasNextPage) {
  //add all places to the list
  setTimeout('pagination.nextPage()',2000);
}  else {
  createMarkers(placesList);
}

顺便说一句。等同于google.maps.GeocoderStatus.OVER_QUERY_LIMIT的地方位置为google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT,您在使用地方信息时应使用此地方。

HTH

答案 1 :(得分:1)

我做了所有这些努力。谢谢你们发帖,但我得到了解决方案。真的很好的解决方案。见下面的工作示例。

当您调用此方法检查其是否有页面时

if(pagination.hasNextPage){
    pagination.nextPage(); // let this do recursive loop against request.
}

//当nextPage()请求完成时

if(pagination.b == null){  

//这里pagination.b有下一页令牌。所以当最后一个请求发送时它返回null。

createMarkers(placesList);

}