2

GooglePlacesApiからリクエストされたすべての結果を表示できません。

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のみです...次のエラーが発生します:Uncaught TypeError:nullのプロパティ'length'を読み取れません。どんな手掛かり?

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

ところで。google.maps.GeocoderStatus.OVER_QUERY_LIMITPlacesはis に相当し、Places google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMITを使用する場合はこれを使用する必要があります。

HTH

于 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 に答える