2013-08-07 3 views
5

J'ai un formulaire qui implémente une carte Google avec la bibliothèque de lieux de Google (demo, en aparté, dans JSFiddle, si j'ajoute gmaps.js comme scénario de référence, il ne fonctionnera pas, mais si je l'ajouter comme un élément de script dans la section HTML du même script fonctionne très bien) exact qui ressemble à ceci:Obtenir une erreur «trop de récursivité» avec Google Maps + la bibliothèque de lieux

<form action="#" method="post"> 
    <table class='Information table table-bordered'> 
    <caption>Information</caption> 
    <colgroup> 
     <col width='100' /> 
     <col/> 
    </colgroup> 
    <tbody> 
     <tr> 
     <th>Location</th> 
     <td> 
      <div class="input-append"> 
      <input type="text" name="Lat" value="37.771424" /> 
      <span class="add-on">lat.</span> 
      </div> 
      <div class="input-append"> 
      <input type="text" name="Lng" value="-122.41332799999998" /> 
      <span class="add-on">lng.</span> 
      </div> 
     </td> 
     </tr> 
     <tr> 
     <th>Map</th> 
     <td> 
      <div id="panel"> 
      <form class="form-search"> 
       <input type="text" class="input-medium search-query" autocomplete="off" id="target" placeholder="Search Box"/> 
      </form> 
      </div> 
     <div id="ScavengerMap"></div> 
     </td> 
     </tr> 
    </tbody> 
    </table> 
</form> 

Avec le code JavaScript suivant:

var input = document.getElementById('target'), 
    searchBox = new google.maps.places.SearchBox(input), 
    map = new GMaps({ 
    div: '#ScavengerMap', 
    lat: 37.771424, 
    lng: -122.41332799999998 
    }); 
google.maps.event.addListener(searchBox, 'places_changed', function() { 
    var places = searchBox.getPlaces(), 
    location; 
    if (places.length > 0) { 
    location = places[0].geometry.location; 
    map.removeMarkers(); 
    map.setCenter(location.jb, location.kb); 
    map.addMarker({ 
     lat: location.jb, 
     lng: location.kb, 
     title: "Slim\'s", 
     draggable: true, 
     dragend: function (e) { 
      var point = e.latLng; 
      $('input[name=Lat]').val(point.lat()); 
      $('input[name=Lng]').val(point.lng()); 
     } 
    }); 
    $('input[name=Lat]').val(location.jb); 
    $('input[name=Lng]').val(location.kb); 
    } 
}); 

map.addMarker({ 
    lat: 37.771424, 
    lng: -122.41332799999998, 
    title: "Slim\'s", 
    draggable: true, 
    dragend: function (e) { 
    var point = e.latLng; 
    $('input[name=Lat]').val(point.lat()); 
    $('input[name=Lng]').val(point.lng()); 
    } 
}); 

Lorsque vous tapez quelque chose dans la boîte de recherche ("Slim" par exemple), vous verrez un ensemble des suggestions de la bibliothèque Google Adresses. Si vous sélectionnez un, il est censé dessiner un marqueur à cet endroit, mais je reçois ces deux erreurs:

too much recursion 
[Break On This Error] 

...))};sa(fg[E],function(a){var b=this.ua,c=Sf(a);b[c]&&(delete b[c],O[m](this,vf,a... 

{main,places}.js (line 26) 
too much recursion 
[Break On This Error] 

....route=function(a,b){Mf("directions",function(c){c.pi(a,b,!0)})};function P(a,b,... 

La chose que je vais avoir du mal à travailler en est pourquoi. Le code qui est dans cette démo est un sous-ensemble du code dans mon projet, mais les deux présentent le même problème. Je ne trouve aucune information concernant une bibliothèque Google Adresses ou une indisponibilité de l'API Google Maps, et plus particulièrement ce même code a fonctionné il y a deux semaines (au moment où je l'ai écrit). Des idées sur comment je pourrais au moins isoler le problème?

Répondre

2

On dirait que je l'ai compris. Il semble que les propriétés .jb et .kb ont été renommées. La méthode correcte pour saisir lat et lng est en appelant .lat() et .lng() sur l'objet places[0].geometry.location. Mon erreur pour suivre un exemple de trop près :)

+1

Vous pourriez également avoir utilisé 'map.setCenter (location.lb, location.mb);' :) –

+1

Pourquoi recommanderiez-vous l'utilisation de propriétés non documentées d'un objet (qu'est ce que .lb et .mb sont)? Il va juste casser la prochaine fois que Google pousse une nouvelle version (ou pourrait). – geocodezip

1

Vous pouvez également vérifier un paramètre de zoom. Si vous n'avez pas de numéro pour le réglage du zoom, ce problème apparaîtra.

Questions connexes