谷歌地图和Internet Explorer Javascript/JONIssue

Google Maps and Internet Explorer Javascript/JSON Issue

本文关键字:JONIssue Javascript Explorer Internet 谷歌地图      更新时间:2023-09-26

我正在使用Google Maps API在用户输入的位置附近构建商店位置地图。一切都正常,但我在Internet Explorer中遇到了一个错误,我想消除它。错误是"json.marks[i].litude为null或不是对象"。这是代码:

function buildGoogMapView(mrkrs,json)
{
var marker=centerLatitude=centerLongitude=startZoom=point=map="";
mrkrs.each(json.gdrcenter, function(i) {
    centerLatitude  = json.gdrcenter[i].latitude;
    centerLongitude = json.gdrcenter[i].longitude;
});
mrkrs.each(json.gdrzoom, function(i) {
    startZoom = json.gdrzoom[i].setting;
});
startZoom = Number(startZoom);
map = new GMap2(document.getElementById("mapGOOG_PlaceHolder"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(centerLatitude, centerLongitude),startZoom);
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);
});}

根据请求,这里是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对象包含正确的信息。我还把脚本移到了页面的末尾,以确保它不是那么简单(事实并非如此)。

有什么想法吗?

尝试更改此项:

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的.ech()使用"for.in"循环方法(至少有时,我认为这取决于它是否在对象上循环)

大多数浏览器在循环时都会忽略"Array.prototype.map()"函数,即使使用"for.in"方法,但Internet Explorer会尝试对其进行循环。这会导致循环的最后一次迭代实际上在"map"函数上,该函数没有"latitude"属性,因此IE会抛出错误:"json.markers[i].alatitude为null或不是对象"。

关于"for.in"循环的更多详细信息:为什么使用"for";对于在";数组迭代是个坏主意吗?