Google地图和Internet Explorer Javascript/JSON问题

Google地图和Internet Explorer Javascript/JSON问题,javascript,json,internet-explorer,google-maps,google-maps-api-3,Javascript,Json,Internet Explorer,Google Maps,Google Maps Api 3,我正在使用GoogleMapsAPI在用户输入的位置附近构建商店位置的地图。一切正常,但我在Internet Explorer中遇到了一个错误,我想把它处理掉。错误是“json.markers[i].latitude为null或不是对象”。代码如下: function buildGoogMapView(mrkrs,json) { var marker=centerLatitude=centerLongitude=startZoom=point=map=""; mrkrs.each(json.g

我正在使用GoogleMapsAPI在用户输入的位置附近构建商店位置的地图。一切正常,但我在Internet Explorer中遇到了一个错误,我想把它处理掉。错误是“json.markers[i].latitude为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对象,根据请求(出于保密目的,我更改了一些值):

我在任何其他浏览器中都没有遇到这个错误,我知道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);
}
for(var i=0;i
如果这消除了错误,请继续阅读解释

这是两个复杂的问题:

  • GoogleMaps添加了一个“Array.prototype.map()”函数
  • jQuery的.each()使用“for..in”循环方法(有时至少,我认为这取决于它是否在对象上循环)
  • 大多数浏览器在循环时会忽略“Array.prototype.map()”函数,即使使用“for..in”方法,但Internet Explorer会尝试在其上循环。这导致循环的最后一次迭代实际上在“map”函数上,该函数没有“latitude”属性,因此IE会抛出错误:“json.markers[i]。latitude为null或不是对象”

    有关“for..in”循环的更多详细信息,请尝试更改:

    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);
    }
    
    for(var i=0;i
    如果这消除了错误,请继续阅读解释

    这是两个复杂的问题:

  • GoogleMaps添加了一个“Array.prototype.map()”函数
  • jQuery的.each()使用“for..in”循环方法(有时至少,我认为这取决于它是否在对象上循环)
  • 大多数浏览器在循环时会忽略“Array.prototype.map()”函数,即使使用“for..in”方法,但Internet Explorer会尝试在其上循环。这导致循环的最后一次迭代实际上在“map”函数上,该函数没有“latitude”属性,因此IE会抛出错误:“json.markers[i]。latitude为null或不是对象”


    关于“for..in”循环的更多详细信息:

    使用验证json-我怀疑它的末尾有一个额外的逗号。。。。。我讨厌多加逗号!JSON对象中没有额外的数组项。谢谢你的想法。你能包括json吗?ie将其发布在您的问题中或创建包含的JSON。希望有帮助。经度和纬度值应该是数字。。。使用
    parseFloat()
    转换-什么是
    mrkrs
    即传递给此函数的是什么?使用验证json-我怀疑它的末尾有一个额外的逗号。。。。。我讨厌多加逗号!JSON对象中没有额外的数组项。谢谢你的想法。你能包括json吗?ie将其发布在您的问题中或创建包含的JSON。希望有帮助。经度和纬度值应该是数字。。。使用
    parseFloat()
    转换-什么是
    mrkrs
    即您传递给此函数的是什么?这不完全正确,但让我找到了正确的解决方案。显然,有一个额外的数组对象,即使在控制台打印输出中也没有显示。我将循环运行到.length-1,结果成功了。谢谢这不是很好,但让我找到了正确的解决方案。显然,有一个额外的数组对象,即使在控制台打印输出中也没有显示。我将循环运行到.length-1,结果成功了。谢谢