【问题标题】:Uncaught TypeError: Cannot read property 'name' of null未捕获的类型错误:无法读取 null 的属性“名称”
【发布时间】:2012-05-31 19:23:02
【问题描述】:

我正在使用 Google Maps and Places API 来获取地点列表并将它们添加到地图中。当您单击其中一个标记时,会出现一个信息窗口,允许用户查看该地点的名称、联系方式等。对于大约 60% 的标记,一切正常,但对于另外 40%,信息窗口没有出现。查看 javascript 错误,我看到了这个:

Uncaught TypeError: Cannot read property 'name' of null.

这是我创建信息窗口的代码:

function createMarker(place) {
  var placeLoc = place.geometry.location;
  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });
  var one = 1;
  var two = 2;

  var request = { reference: place.reference };
  service.getDetails(request, function(details, status) {
    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(
        details.name + "<br />"
        + details.formatted_address + "<br />"
        + "<a target='_blank' href='" + details.website +"'>Visit Website</a>" + "<br />"
        + details.formatted_phone_number + "<br />"
        + "<a href='#' onclick='getDirections(" + details.geometry.location.toUrlValue() 
        + "," + location1 + "); return false;'>Directions from Marker One</a>" + "<br />"
        + "<a href='#' onclick='getDirections2(" + details.geometry.location.toUrlValue()
        + "," + location2 + "); return false;'>Directions from Marker Two</a>" + "<br />"
      );
      infowindow.open(map, this);
    });
  });
}

我真的不明白这个错误。 Google 存储的所有地点肯定都必须有名称吗?!

为了记录,我查看了 Google Places & Maps API 文档,但我真的找不到任何对我有帮助的东西。

任何帮助将不胜感激。

更新:

所以我按照建议在控制台中记录了这些位置。对于我正在做的示例测试,它在我的地图上创建了 20 个标记。在它创建的 20 个中,只有 8 个在单击时显示信息窗口,其他 12 个返回上面列出的错误。正如我所料,所有 20 个地方都已打印到控制台,所有这些都是对象,而且它们看起来都一样。下面我列出了控制台中打印的可点击和不可点击的内容。

可点击:

Object
geometry: Object
html_attributions: Array[0]
icon: "http://maps.gstatic.com/mapfiles/place_api/icons/bar-71.png"
id: "97df16ee5e8d0d9e0c337f52b66dd85ae44de298"
name: "Red Lion"
rating: 3.3
reference: "CnRmAAAA1Oe3LpGcT2zpHUgRq4jfsx-QsnpgUlPKKhVhBL0AVjY1BNKJiscqTbxl-25alM_DJzTIjJTeIkpuVKL0CHkxgBc_nLKNddOkKv6EICQymo7etn-MVY4h06bTKUBwSjIfH30vbNSgCeiv3Cfzy27eORIQrUUJ4nStEjkCI2fJMTaVsRoUHI04xFPDfej3xHC17nJH2mBNBzg"
types: Array[3]
vicinity: "Little Missenden, Amersham"
__proto__: Object

不可点击:

Object
geometry: Object
html_attributions: Array[0]
icon: "http://maps.gstatic.com/mapfiles/place_api/icons/bar-71.png"
id: "01128746c46a52d9a215d3d6a01c11e22f1a49be"
name: "The Full Moon"
rating: 3.9
reference: "CnRrAAAAWDw84_G5mLrNQxd1b14uVsPhw6LmR6sXdvDrJqSDqnMUSzj88n1TImyictRtxtI6_mQz5YXyiBDWM5Un74MoCH06On5kf5JDw6RM3le2SDUcqyZO04NhqwyeBT267ctu91I74hTJmx_VGgqEpXe0HxIQhErbCKXmDJU2yaVmtltITxoUOi4OrxKU9fPGoBiYAn3NGmNpcn8"
types: Array[2]
vicinity: "Hare Lane, Little Kingshill, Great Missenden"
__proto__: Object

我也尝试过删除所有不必要的代码。

可能值得注意的是,控制台中打印的某些属性可以进一步扩展,不确定是否相关,因此我没有为示例做。如果有人认为它是相关的,我可以在以后添加一个更新的。

感谢到目前为止的所有回复。

JA

【问题讨论】:

  • detailsnull,所以它不是“没有名字的地方”而是“不是地方”。找出原因。
  • 尝试打印对控制台的引用并将其替换为 Web 浏览器中的 Places API 详细信息请求以测试请求。

标签: javascript google-maps google-maps-api-3 google-places-api


【解决方案1】:

detailsnull,所以你的请求,即place.reference 有问题。将place 登录到控制台并打开它,看看里面有什么——如果有的话。

【讨论】:

  • 感谢您的建议和想法。我已经将这些地方打印到控制台中,它们看起来都是正确的(除非我明显遗漏了一些东西,这很可能。)我已经用新的发现更新了原始问题。如果你有机会去看我会很感激的。干杯JA
  • 我看到的唯一区别是 types 数组。一个有 3 个元素,另一个有 2 个……就在 service.getDetails(request, function(details, status) { 登录到控制台详细信息和状态之后。看看它们长什么样。
  • 好的,这会返回一些非常有趣的结果。如果我将状态记录到控制台,我会收到很多 OVER_QUERY_LIMIT 消息,当我记录详细信息时,我会收到很多与我添加到更新的原始问题中的对象相同的对象和很多空值。控制台显示对象,然后是 null,然后是下一个对象。我还有一些事情要调查,但我认为这会引发更多问题!非常感谢您的帮助。
  • OVER_QUERY_LIMIT 表示您查询太多/太快。减慢查询速度。
  • 我原以为 20 个地方请求就可以了。感谢您给我的所有帮助。 JA
猜你喜欢
  • 2022-01-19
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 2022-07-02
  • 2022-06-14
  • 2022-10-23
相关资源
最近更新 更多