2012-07-18 4 views
0

아래 코드는 Firefox 및 IE9에서는 잘 작동하지만 IE8에서는 마커를 업데이트하는 데 문제가 있습니다. 내가 "SCRIPT16389을. : 지정되지 않은 오류 main.js, 라인 (20) 문자 313"GET 번 상자에 포장 마커 데이터Google지도 클러스터 IE8 문제

의 새로운 세트를 업데이트하지 않는

내 newdata.json 형식은 아래

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

하고있다 스크립트 내가 deleteOverlays에 뭔가를 추측 JSON을 얻고 점

IE8지도로드 미세하고 intial 데이터가 잘 표시됩니다에
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(); 
    } 
} 

를 표시하는 클러스터링을 사용하지만, 새로운 데이터가 너무 업데이트되지 않습니다 있나요?

는 위의 예는 http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/examples/advanced_example.html?compiled

답변

0

캐시 추가 : false, 항상 최신 json을 가져오고 의도 한대로 마커를 업데이트하도록 IE8을 트리거합니다. `for` ...의 요점을 고려

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 확인. IE8이 맨해튼 프로젝트의 지상 제로에서 카나리아와 같은 양동이를 걷어차는 반면, 다른 브라우저들은 HTML을 함께 조각하는 방법을 이해할만큼 똑똑 할 수 있습니다.

아니, 정말로, for/in 배열 사용을 중지하십시오. 그것이 작동 할 때조차도 그것은 완전히 엉망이 될 수 있습니다.

+0

는'in' 객체의 속성을 반복하는 것이며, "배열"나는 거의 바보를 호출하지 것이다 단지 numberish 특성을 가진 객체입니다 . 바보 같은 IMO는 언어의 모든 다른 객체와 관련이없는 배열과 관련된 마술적인 일이 있다는 부당한 가정입니다. – cHao

+0

그래,하지만 배열 속성을 someArray.0으로 배열 요소에 액세스 할 수 있어야합니다 (어쨌든 불법 레이블이 아니라 브라우저가 가장주의해야합니다). - 허용하면 모호함이 발생합니다. 배열 인덱스가 정렬됩니다. 일반 개체 속성은 그렇지 않습니다. 그들은 다른 규칙을 따르는 다른 동물이며, 그렇게 취급되어야합니다. 사양이 명확하지 않다면 그렇게해야합니다. 우리는 일반화 된 이터레이터를 곧 출시 할 예정이지만, 속성과 배열 키를 분리하는 것이 불편한 것보다 유용합니다 (IMO). –

+0

수정, 배열 요소가 아니라 속성을 의미합니다. 유용한만큼, 메타 데이터 속성을 배열에 추가 한 다음 in 루프에서 hasOwn 검사를 사용하고 키 배열 요소가 적중하지 않을 것이라고 가정 할 수 있다면 얼마나 편리할까요? ? 정말 큰 배열을 상상해보십시오. –