2012-03-28 39 views
0

这个问题已经得到解答。我发现了什么问题。 但是,我在这里发布Q & A,因为其他人可能处于同样的困境。谷歌地图V3不加载(提问和回答)

我的谷歌地图代码来自我在网上找到的样本。

在“坏”的代码有一条线,是这样的:

var latlng= new google.maps.LatLng(results[0].geometry.location.Ua, results[0].geometry.location.Va); 

此代码的工作,直到昨晚。 使用萤火虫检查对象,事实证明,现在的位置的形式:{Ta:number,Ua:number}

我的立即修复是使用lat()和lng()方法,只要我需要lat和/或lng。

另一个修复方法是以更智能的方式实例化我的地图。

是的,它愚蠢地依赖于使用萤火虫检查器在物体深处发现的属性。是的,作为谷歌地图noob和依靠复制粘贴,很少或没有知识收获了它的正义奖励。

但是,做一个快速的谷歌搜索发现许多人(除了从我借来的“样本”)也直接使用.Va属性。

因此,这里的帖子以防万一这是他们的问题。

+0

如果回答了,那么人们会通过它找到它,不需要这样做。您可能会要求删除,这不会影响您在我看来的声誉,或者其他人会删除它。:) – Grigor 2012-03-28 22:14:14

+0

堆栈溢出是一个问答网站,而不是论坛。随意编辑你的问题成为一个真正的问题,并提供自己的答案。但就目前来看,这不是一个真正的问题,可能会因此而关闭。 – NullUserException 2012-03-29 16:51:47

+0

我试图按照http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-you-own-questions/上的建议询问和解答此问题。也许这种做法已经过时了。 – Claude 2012-04-09 22:16:54

回答

2

如果您对感兴趣,为什么发生这种情况,很简单:该示例使用的是API的未公开内容,因此当Google更新Maps JS文件时,该文件就打破了。

更具体地说,UaVa是由minification产生的自动生成的变量名称。 Google看起来在原始来源中删除了一个变量,并且标签向上移动(UaVaTaUa)。

我敢打赌,我确切知道坏样本的作者是如何提出他的代码的。他在浏览器的开发工具中检查了LatLng(在您的示例中为location中的对象类型),发现这两个奇怪命名的变量包含他想要的数据,并随它一起前进。由于latlng方法“隐藏”在LatLngprototype,他没有注意到他们。

有两个教训可以在这里学到:

  1. 始终使用documented API methods;其他任何东西都是可能会改变的实现细节。
  2. 不要相信一些老兄的网站上的代码是甚至是如何做事情的胜任范例。 Google地图尤其如此,其中有大量的文档和官方示例。
+0

呃.....显示我是多么新。从来没有想过缩小。感谢您花时间给出解释。 – Claude 2012-03-29 00:32:11