6

希望你能帮忙,因为我遇到了困难,我对使用Google的Places API也很陌生。InvalidValueError:initAutocomplete不是一个函数Google Places和Autocomplete API

我不打算发布任何代码,因为我的代码可以很好地工作,当我将要描述的两件件单独运行时。

我使用的是Google的Places,除了使用Google提供的Javascript示例工作的自动填充API之外。

起初,我有以下脚本在我的文档的底部:

<script src="https://maps.googleapis.com/maps/api/js?&libraries=places&callback=initAutocomplete" async defer></script> 

和这个脚本在我的文档的顶部:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 

这给了我,“你已经包括Google Maps API多次出现在此页面上,这可能会导致意外错误。“所以寻找到这后,我合并在一起都像这样:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&callback=initAutocomplete&sensor=false"></script> 

但是,现在,我已经这样做了,我收到以下错误:

InvalidValueError: initAutocomplete is not a function 
TypeError: searchBox is undefined 

我没有收到这些错误时,论文脚本不合并,但我后来意识到需要Places API的功能停止工作。如果我删除了自动填充API参考,那么Places函数就可以工作。

关于如何使这两个工作在一起的任何想法,如图所示合并这些并解决“不是功能”问题?

任何建议将不胜感激,请让我知道你是否真的需要看代码。

由于提前, 斯蒂芬

回答

5

您应该使用包括脚本只有一次,如:

//maps.googleapis.com/maps/api/js?key=__API-KEY__&libraries=places 

请注意,您包括脚本时省略了“回调” PARAM。 然后在窗口中加载负荷像initAutocomplete:

google.maps.event.addDomListener(window, 'load', initAutocomplete); 

也许你需要包括在头gmaps脚本或者您会得到“没有定义谷歌的错误,如果你下的js内联。

0

谷歌地图API自动完成:未捕获InvalidValueError:initAutocomplete不是一个函数

下面是我的代码:

<div id="locationField"> 
     <input id="autocomplete" placeholder="Enter your address" type="text"></input> 
    </div>--This is the input field 
    <script>-- This is Javascript 

     var placeSearch, autocomplete; 
     var componentForm = { 
     street_number: 'short_name', 
     route: 'long_name', 
     locality: 'long_name', 
     administrative_area_level_1: 'short_name', 
     country: 'long_name', 
     postal_code: 'short_name' 
     }; 

     function initAutocomplete() { 
      autocomplete = new google.maps.places.Autocomplete(
      /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')), 
      {types: ['geocode']}); 
      autocomplete.addListener('place_changed', fillInAddress); 
     } 

     function fillInAddress() { 

     var place = autocomplete.getPlace(); 

     for (var component in componentForm) { 
      document.getElementById(component).value = ''; 
      document.getElementById(component).disabled = false; 
     } 


     for (var i = 0; i < place.address_components.length; i++) { 
      var addressType = place.address_components[i].types[0]; 
      if (componentForm[addressType]) { 
      var val = place.address_components[i][componentForm[addressType]]; 
      document.getElementById(addressType).value = val; 
      } 
     } 
     } 


     function geolocate() { 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) { 
      var geolocation = { 
       lat: position.coords.latitude, 
       lng: position.coords.longitude 
      }; 
      var circle = new google.maps.Circle({ 
       center: geolocation, 
       radius: position.coords.accuracy 
      }); 
      autocomplete.setBounds(circle.getBounds()); 
      }); 
     } 
     } 
    </script> 

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAQQUPe-GBmzqn0f8sb_8xZNcseul1N0yU&libraries=places&callback=initAutocomplete" async defer></script> 
+1

这是什么,这是一个问题或答案? – Siddharth