2012-07-18 64 views
0

下面的代码在Firefox和IE9上正常工作,但在更新IE8上的标记时出现问题。我得到“SCRIPT16389:未指定的错误main.js,行20字313”,一旦装箱标记不与新数据组谷歌地图集群IE8问题

的更新

我newdata.json格式

{ 
    "points": [ 
     { 
      "lat": "-28.0000", 
      "long": "133.1500", 
      "id": 0 
     }, 
     { 
      "lat": "-28.4710", 
      "long": "153.3443", 
      "id": 1 
     } 
    ] 
} 

及以下在脚本获得JSON和使用集群,以显示点

var map=null; 
var markersArray = []; 
var markerCluster= null; 
google.load('maps', '3', { 
     other_params: 'sensor=true' 
}); 
google.setOnLoadCallback(initialize); 

function initialize() { 
    var mapcentre = new google.maps.LatLng(-29,135); 
    var mapOptions = { 
     zoom: 5, 
     center: mapcentre, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    map = new google.maps.Map(document.getElementById('map'), mapOptions); 
    startTimer(); 
} 

function startTimer(){ 
    setInterval(function() { 
     deleteOverlays();//should delete any existing point and clear the cluster 
     addMarker(); 
    },3000); 
} 

function addMarker() { 
     $.ajax({ 
      type: "GET", 
      url: "newdata.json", 
      async: false, 
      dataType: "json", 
      success: function(data){ 
       for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) { 
        var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long); 
        var marker = new google.maps.Marker({ 
          position: latLng 
        }); 
        markersArray.push(marker); 
       }   

       markerCluster = new MarkerClusterer(map, markersArray); 
      } 


     }); 
} 


// Deletes all markers in the array by removing references to them 
function deleteOverlays() { 
    if (markersArray.length > 0) { 
    for (i in markersArray) { 
     markersArray[i].setMap(null); 
    } 
    markersArray.length = 0; 
    } 
    if(markerCluster!= null) { 
     markerCluster.clearMarkers(); 
    } 
} 

在IE8地图加载罚款和INTIAL数据显示正常,但新的数据没有更新,所以我想什么毛病deleteOverlays?

上面的例子是基于http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/examples/advanced_example.html?compiled

回答

0

添加缓存:false,触发IE8始终获取最新的json并按照预期更新标记。

function addMarker() { 
    $.ajax({ 
     type: "GET", 
     url: "newdata.json", 
     async: false, 
     cache: false, 
     dataType: "json", 
     success: function(data){ 
      for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) { 
       var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long); 
       var marker = new google.maps.Marker({ 
         position: latLng 
       }); 
       markersArray.push(marker); 
      }   

      markerCluster = new MarkerClusterer(map, markersArray); 
     } 


    }); 

}

0

好一两件事,这是非常错误的是,/在环意的对象,而不是数组。我一直恨IE,但现在越来越频繁,如果我希望其他人愿意的话,它似乎是一个突破。它可能会打破这一点。在这些崭新的J-I-T年轻的whippersnapper浏览器中往往会发生的事情是,它们会击中所有键,但所有阵列属性都是白痴,IMO。这是通过一个数组打字光线和更有效的方式来循环(记住它会向后):

var i = markersArray.length 
while(i--){ 
    markersArray[i].setMap(null); 
} 

如果不是这样,请检查HTML。如果你已经破坏了HTML,其他浏览器可能会足够聪明,以便弄清楚如何将它拼凑在一起(再次,太聪明的IMO),而IE8将像曼哈顿项目的地面零点处的金丝雀一样踢出桶。

不,真的,停止使用for/in阵列。即使它起作用,也可能是一团糟。

+0

考虑的'for' ......整点'in'是通过对象的属性进行迭代,而“阵列”只是与numberish对象的属性,我很难把它叫做白痴。什么是白痴,国际海事组织,这是这个毫无道理的假设,它有一些神奇的事情,它与阵列,它不会与语言中的其他任何对象。 – cHao 2012-07-18 04:03:39

+0

是的,但数组属性不应该被暴露给它,而不是我应该能够通过someArray.0访问数组元素(反正非法标签,而不是任何浏览器最关心的) - 允许这会产生歧义。数组索引是有序的。常规的对象属性不是。他们是不同的动物,遵循不同的规则,应该这样对待。如果规范不明确,那应该是。我们很快得到了泛化的迭代器,但它比不方便的将属性和数组键分离出来更有用。 – 2012-07-18 14:10:05

+0

更正,我的意思是数组元素,而不是属性。只要它很有用,它能够为数组添加元数据属性,然后在循环中使用hasOwn检查并能够假定键控数组元素不会被触及?想象一下真的很大的数组。 – 2012-07-18 14:31:48