2013-08-07 2 views
5

У меня есть форма, которая реализует карту Google с помощью библиотеки мест Google (demo, как в стороне, в JSFiddle, если я добавлю gmaps.js в качестве сценарий ссылки он не будет работать, но если добавить его в качестве элемента сценария в разделе HTML точно такой же сценарий прекрасно работает), который выглядит так:Ошибка «слишком много рекурсии» с Google Maps + библиотека мест

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

Со следующим 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()); 
    } 
}); 

Когда вы вводите что-то в поле поиска (например, «Slim's»), вы увидите набор предложений из библиотеки Google Адресов. Если вы выбираете один, он должен сделать отметку в этом месте, но вместо этого я получаю эти две ошибки:

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

То, что я с трудом разработки почему. Код, который находится в этой демонстрации, является подмножеством кода в моем проекте, но оба представляют ту же проблему. Я не могу найти какую-либо информацию об ошибке в Google Местах или отключении API Карт Google, и, тем не менее, этот еще один код работал еще 2 недели назад (время, когда я его написал). Любые идеи о том, как я мог бы хотя бы изолировать проблему?

ответ

2

Похоже, я понял. Кажется, что свойства .jb и .kb были переименованы. Правильный способ захвата lat и lng - это позвонить по телефону .lat() и .lng() по объекту places[0].geometry.location. Моя ошибка слишком близка к примеру :)

+1

Вы также могли использовать 'map.setCenter (location.lb, location.mb);' :) –

+1

Зачем вам когда-либо рекомендовать использование недокументированных свойств объекта (что такое .lb и .mb)? Он снова сломается в следующий раз, когда Google нажимает новую версию (или может). – geocodezip

1

Вы также можете проверить настройку масштабирования. Если у вас нет номера для настройки масштабирования, эта проблема появится.

Смежные вопросы