2012-10-12 4 views
2

Je ne peux pas afficher tous les résultats demandés Google Adresses .. ApiGoogle API Google Adresses: Impossible d'afficher les résultats de recherche

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

i utilisé et obtenir 60 pagination des résultats, mais ne peut afficher que 20. .et 40 en utilisant la fonction settimeout() ... en obtenant l'erreur suivante: Uncaught TypeError: Impossible de lire la propriété 'length' de null. Une idée?

Répondre

1

Très probablement, vous obtenez OVER_QUERY_LIMIT en ligne:

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

parce que vous créez déjà des marqueurs, qui mange votre quota.

Essayez de mettre en file d'attente les demandes de détails après avoir complété toute la liste et d'ajouter la même logique de délai pour vérifier google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT sur cette ligne.

Par exemple, vous pourriez dire:

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

btw. L'équivalent en places de google.maps.GeocoderStatus.OVER_QUERY_LIMIT est google.maps.places.PlacesServiceStatus.OVER_QUERY_LIMIT et vous devriez l'utiliser lorsque vous utilisez Places.

HTH

+0

toujours impossible d'afficher 60 résultats ... d'une autre manière – teekib

+0

quelles erreurs obtenez-vous maintenant? Vous aurez besoin d'ajouter une fonction de veille avant de demander le lot suivant, j'ai raté cette dernière fois. Tout comme les docs disent: "nextPage() une fonction qui retournera l'ensemble de résultats suivant.Après l'exécution d'une recherche, vous devez attendre deux secondes avant que la prochaine page de résultats soit disponible.". Jetez également un oeil ici: http://stackoverflow.com/questions/11665684/more-than-20-results-by-pagination-with-google-places-api pour une réponse à la même question. – kaskader

+0

ouaish..Merci kaskader – teekib

1

J'ai fait tous ces efforts. Merci pour vous les gars pour poster, mais j'ai eu la solution. vraiment une bonne solution. Voir l'exemple de travail ci-dessous.

Lorsque vous appelez cette méthode pour vérifier si elle a des pages ou non

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

// lorsque la demande nextPage() se termine

if(pagination.b == null){ 

// ici pagination.b a prochain jeton de page. donc il retourne null lorsque la dernière requête est envoyée.

createMarkers(placesList); 

} 
Questions connexes