가능한 중복대로 작동하지 :
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);
}
json.length> 0인지 확인 했습니까? – RonaldBarzell
'$ .get'은 ** 비동기 **입니다. Oh와 @MikeBonds는 정확합니다 - 그것은'markers.push (marker);이어야합니다. – Pointy
빈 인덱스를 밀고있는 것 같습니다. markers.push (마커 [i]); 마커는 원래 배열이며 비어 있습니다. 그래서 당신은 기본적으로 그것을 스스로에게 밀고 있습니다. –