2012-11-28 7 views
1

가능한 중복대로 작동하지 :
change global variable inside javascript closure저장 자바 스크립트 데이터는 예상

내가 자바 스크립트 전역 배열에 데이터를 저장하는 데 문제가 있어요. 배열에 어떤 요소를 할당했는데 왜 배열이 비어 있는지 알 수 없습니다.

기본적으로 두 가지 기능이 있습니다. loadMarkers은 사용자가 버튼을 클릭하여 JSON의 URL에서 정보를 가져 와서 해당 데이터를 구문 분석하고이를 전역 배열에 저장할 때마다 호출됩니다. 다른 함수는 showMarkers이며 배열을 반복하고 모든 마커를 보여 주지만 그 배열은 비어 있습니다!

Thansks in advance.

var markers = []; 


function loadMarkers(url) { 

    markers = []; 
    $.get(url, function(data) { 

     var json = jQuery.parseJSON(data); 

     for (var i = 0; i < json.length; i++) { 

      // parsing json 
      var lat = json[i].Latitude; 
      var lng = json[i].Longitude; 
      var id = json[i].ID; 

      console.log(id); // this prints with no problems! 

      // create new marker 
      var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(lat, lng), 
       title: id, 
       html: "<p>" + "Info for container " + id + "</p>" 
      }); 

      // add marker to markers array   
      markers.push(markers[i]); 

      // add info window to marker 
      google.maps.event.addListener(marker, "click", function() { 
       infoWindow.setContent(this.html); 
       infoWindow.open(map, this); 
      }); 
     } 
    }); 
} 

function showMarkers() { 
    for (i = 0; i < markers.length; i++) 
     console.log(markers); // here I get an empty array! 
     markers[i].setMap(map); 
} 
+0

json.length> 0인지 확인 했습니까? – RonaldBarzell

+0

'$ .get'은 ** 비동기 **입니다. Oh와 @MikeBonds는 정확합니다 - 그것은'markers.push (marker);이어야합니다. – Pointy

+5

빈 인덱스를 밀고있는 것 같습니다. markers.push (마커 [i]); 마커는 원래 배열이며 비어 있습니다. 그래서 당신은 기본적으로 그것을 스스로에게 밀고 있습니다. –

답변

4

그것은이 선 보인다 :

markers.push(marker); 
2

아마 $.get() 방법은 방법이 완료된 후이 기능을 실행할 수있는 jQuery를 연기 객체를 반환 코멘트에 두 번째 질문에 대해서는 그 다음 코드

// add marker to markers array   
markers.push(marker); // was markers[i] 

.

markers.push(markers[i]); 

대신해야한다 : 당신은 당신의 코드에 오타가

markers.push(marker); 
+0

@nunos 귀하의 의견에 비추어 답변을 업데이트했습니다. – Bruno

1

...

markers.push(markers[i]); 

것은해야

$.get().done(function() { 
    // your code 
}); 
관련 문제