2

我无法显示从 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...得到以下错误:未捕获的类型错误:无法读取 null 的属性“长度”。有什么线索吗?

4

2 回答 2

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);
}

顺便提一句。Places 等效于 google.maps.GeocoderStatus.OVER_QUERY_LIMITis google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT,您应该在使用 Places 时使用它。

高温高压

于 2012-10-14T16:04:57.437 回答
1

我已经做了所有这些努力。感谢你们发帖,但我得到了解决方案。真的是一个很好的解决方案。请参阅下面的工作示例。

当你调用这个方法来检查它是否有页面时

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

// 当 nextPage() 请求完成时

if(pagination.b == null){  

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

createMarkers(placesList);

}
于 2013-09-03T11:58:42.417 回答