1

我使用Google Maps API在用户输入位置附近构建商店位置地图。一切正常,但我在Internet Explorer中遇到了一个错误,我想摆脱它。错误在于“json.markers [i] .latitude为空或不是对象”。下面的代码:Google地图和Internet Explorer Javascript/JSON问题

​​

而这里的JSON对象,要求(我已经改变了一些值的保密目的):

{"gdrzoom":[ 
{"setting":"7"}], 
"gdrcenter":[ 
{"latitude":"35.5", 
"longitude":"-79.6"}], 
"markers":[ 
{"latitude":"35.0", 
"longitude":"-78.9", 
"name":"Store", 
"description":"DESCVALUE"}, 
{"latitude":"36.0", 
"longitude":"-79.8", 
"name":"Store", 
"description":"DESCVALUE"}, 
{"latitude":"35.5", 
"longitude":"-80.8", 
"name":"Store", 
"description":"DESCVALUE"}]} 

我没有在任何其他收到此错误浏览器,我知道json对象包含正确的信息。我也将脚本移到了页面的末尾,以确保它不是那么简单(不是)。

任何想法?

+0

验证使用http://jsonlint.com/的JSON - 我怀疑有在它的结束一个逗号.... 。IE讨厌额外的逗号! – ManseUK 2012-02-15 15:31:20

+0

JSON对象中没有额外的数组条目。感谢这个想法。 – 2012-02-15 15:46:22

+0

可以包含json吗?即张贴在您的问题或创建一个http://jsfiddle.net – ManseUK 2012-02-15 15:53:16

回答

1

尝试修改此:

mrkrs.each(json.markers, function(i) { 
    point = new GLatLng(json.markers[i].latitude,json.markers[i].longitude); 
    marker = createMarker(point,json.markers[i].description); 
    map.addOverlay(marker); 
});} 

要这样:

for (var i = 0; i < json.markers.length; i++) { 
    point = new GLatLng(json.markers[i].latitude,json.markers[i].longitude); 
    marker = createMarker(point,json.markers[i].description); 
    map.addOverlay(marker); 
} 

如果删除错误,然后阅读的解释。

它加剧的两个问题:

  1. 谷歌地图增加了一个 “Array.prototype.map()” 函数
  2. jQuery的。每()使用循环的 “的for..in” 的方法(有时至少,我认为这取决于它是否循环的对象上)

大多数浏览器会忽略“Array.prototype.map()”循环时,即使有“的for..in”方法的功能,但Internet Explorer将尝试在其上循环。这导致循环的最后一次迭代实际上处于“地图”函数中,该函数没有“纬度”属性,因此IE会引发您的错误:“json.markers [i] .latitude is null or not an目的”。

上“的for..in”循环这里更详细的信息:Why is using "for...in" with array iteration a bad idea?

+0

这不完全是,但让我找到正确的解决方案。很明显,还有一个额外的数组对象,即使在控制台打印输出中也没有显示出来。我将循环运行到.length - 1,它工作。谢谢! – 2012-02-17 14:20:58