我无法显示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”。任何线索?
答案 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);
}