2013-08-07 8 views
5

Ho un modulo che implementa una mappa di Google con la libreria di Google Places (demo, a parte, in JSFiddle, se aggiungo gmaps.js come lo script di riferimento non funzionerà, ma se aggiungo come un elemento script nella sezione HTML esattamente lo stesso script funziona bene) che assomiglia così:Errore di "troppa ricorsione" con Google Maps + la biblioteca dei luoghi

<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> 

Con la seguente JavaScript:

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

Quando scrivi qualcosa nella casella di ricerca ("Slim's" ad esempio) vedrai un set di suggerimenti dalla libreria di Google Places. Se si seleziona uno, si suppone per disegnare un marcatore in quella posizione, ma invece ottengo questi due errori:

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 cosa che sto avendo un momento difficile lavorare fuori è perché. Il codice presente in questa demo è un sottoinsieme del codice nel mio progetto, ma entrambi presentano lo stesso problema. Non riesco a trovare alcuna informazione su una Google Places Library o un'interruzione dell'API di Google Maps, e ancora più strano questo stesso codice ha funzionato già 2 settimane fa (l'orario in cui l'ho scritto). Qualche idea su come potrei almeno isolare il problema?

risposta

2

Sembra che l'ho capito. Sembra che le proprietà .jb e .kb siano state rinominate. Il metodo corretto per afferrare lat e lng è chiamando .lat() e .lng() sull'oggetto places[0].geometry.location. Il mio errore nel seguire un esempio troppo da vicino :)

+1

Si potrebbe anche aver usato 'map.setCenter (location.lb, location.mb);' :) –

+1

Perché dovresti mai raccomandare l'uso di proprietà non documentate di un oggetto (che cosa sono .lb e .mb)? Si interromperà di nuovo la prossima volta che Google spinge una nuova versione (o potrebbe). – geocodezip

1

È possibile controllare anche le impostazioni di zoom. Se non si dispone di un numero per l'impostazione dello zoom, verrà visualizzato questo problema.

Problemi correlati