Google maps api 3 places api无法获取属性';地址"组件"';指未定义的或空的引用

Google maps api 3 places api无法获取属性';地址"组件"';指未定义的或空的引用,google-maps-api-3,google-places-api,Google Maps Api 3,Google Places Api,使用GooglePlacesAPI无法理解为什么autocomplete在调用GetPlaces时返回undefined。 开发人员工具显示的是。 地址\组件是调用autocomplete.getPlace时应返回的内容 无法获取未定义或空引用的属性“address\u components” function initAutoCompleteDynamic() { var slideID = 99; var idx = 99 - slideID; var propcount = 5; f

使用GooglePlacesAPI无法理解为什么autocomplete在调用GetPlaces时返回undefined。 开发人员工具显示的是。 地址\组件是调用autocomplete.getPlace时应返回的内容 无法获取未定义或空引用的属性“address\u components”

function initAutoCompleteDynamic() {
var slideID = 99;
var idx = 99 - slideID;
var propcount = 5;

  for (var i = 0; i < propcount; i++) {
    var propaddress = "prop1address" + i;
    var autocomplete = autocomplete + i;
    autocomplete = new google.maps.places.Autocomplete(
        document.getElementById(propaddress)),
        { types: ['geocode'] };
       autocomplete.addListener('place_changed', fillinAddressDynamic);


  }
}
函数initAutoCompleteDynamic(){
var=99;
var idx=99-slideID;
var-propcount=5;
对于(变量i=0;i
而且在动态中

     var place=autocomplete.getPlace():
      for (var i = 0; i < place.address_components.length; i++) {
    alert("i am in the loop");
    var addressType = place.address_components[i].types[0];
    var field = addressType;
    var completeaddress1 = '';
    var propaddress = 'prop1address' + i;
    var strnum = 'streetnumber' + i;
    CR(i);//calling component resolver. 


    if (componentFormProduction[addressType]) {
        var val = place.address_components[i][componentFormProduction[addressType]];
        document.getElementById(CR[addressType]).value = val;

        if (field == "street_number") {
            var streetnum = document.getElementById(strnum).value = val;

        }
        if (field == "route") {
            if (streetnum) {
                completeaddress1 = streetnum + ' ' + val;
            }
            else {
                completeaddress1 = val;
            }
            document.getElementById('prop1address0').value = completeaddress1;
        }
    }

}
var place=autocomplete.getPlace():
对于(变量i=0;i
如果用户(或您)在未单击建议的情况下按Enter键,则会发生这种情况

通常,事件的顺序如下所示:

  • 用户输入
  • JavaScript查询自动完成建议
  • 用户点击一个建议
  • JavaScript查询详细信息,将用户输入替换为详细信息响应的字段(包括
    地址\u组件
    并触发
    更改位置
    事件
  • places\u changed
    的处理程序将通过调用
    getPlace()
  • 然而,也可能是这样的:

  • 用户输入
  • JavaScript查询自动完成建议
  • 用户忽略建议并点击
    Enter
    ,而不点击其中一个
  • JavaScript在不查询详细信息或修改用户输入的情况下触发
    places\u changed
    事件
  • places\u changed
    的处理程序调用
    getPlace()
    并获取一个几乎为空的Place对象,其中只有
    name
    字段包含原始用户输入
  • 您可以决定如何处理原始用户输入,以下是一些示例:

    此工具使用JavaScript地理编码服务搜索该输入:

    此示例(地址表单)与此无关:

    此(非常基本)示例将显示一条错误消息,该消息不报告任何详细信息:

    不,这不是因为没有选择地址,我相信这是由于调用的异步性质,这是来自google api的动态加载数据,我认为修复方法是使用自定义延迟对象,这似乎是一个计时错误有时它工作有时它不延迟应该修复/让它等待足够长的时间才能完成。