다음 코드는 6 명의 사용자가 5 개의 마이크로 포스트를 포함하는 /home.json URL의 일부 JSON 데이터를 가져옵니다. 그러나 마지막 4 개의 마커 만 표시됩니다 (5 번째조차도!). 나는 벌레를 발견하기 위해 2 일을 보내었다. 그러나 불행하게도 나는 이것이 왜 dosen't 일하는지 정말로 알 수 없다. 누구든지 나를 도울 수 있다면 정말 감사하겠습니다!자바 스크립트는 마지막 마커 만 표시합니다.
경고를 통해 모든 lon/lat 변수를 테스트했습니다! 그들 모두에게 적절한 데이터가 있습니다. 지난 4 일 이후지도가 표시됩니다. .. 대부분의 아마 문제가 내 폐쇄 정의와 거짓말을하지만 난 정말 내가 뭘 잘못 이해할 수 없다
var GMAPS = window.GMAPS || {};
GMAPS.mainMap = function() {
var map;
var infowindow = new google.maps.InfoWindow();
var jsonObject = {};
function addMarkers() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/home.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
jsonObject = JSON.parse(xhr.responseText);
for (var i=0; i<jsonObject.length; i++) {
for (var j=0; j<jsonObject[i].microposts.length; j++) {
(function(Name, Title, Content, Latitude, Longitude) {
return function() {
//alert(Name + "\n" + Title + "\n" + Content + "\n" + Latitude + "\n" + Longitude + "\n"); //<-- this works!
var position = new google.maps.LatLng(Latitude, Longitude);
var contentString = "<h4>" + Name.bold() + "</h4>" + "<br />" + Title.bold()
+ "<br />" + Content;
var marker = new google.maps.Marker({
position: position,
title: Title,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, contentString) {
return function() {
infowindow.setContent(contentString);
infowindow.open(map, marker);
}
})(marker, contentString));
};
})(jsonObject[i].name, jsonObject[i].microposts[j].title,
jsonObject[i].microposts[j].content,
jsonObject[i].microposts[j].lat,
jsonObject[i].microposts[j].lon)();
}
}
}
};
xhr.send(null);
}
function createMap() {
map = new google.maps.Map(document.getElementById('main_map'), {
zoom: 10,
panControl: true,
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL
},
mapTypeControl: true,
scaleControl: true,
streetViewControl: true,
overviewMapControl: true,
scrollwheel: false,
center: new google.maps.LatLng(37.975327,23.728701),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
}
function initAddress() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
}
else {
var position = new google.maps.LatLng(0, 0);
map.setCenter(position);
}
}
function showPosition(position) {
var position = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
map.setCenter(position);
}
return {
initMap : function() {
createMap();
initAddress();
addMarkers();
}
};
}();
document.addEventListener("DOMContentLoaded", GMAPS.mainMap.initMap, false);
답변 해 주셔서 감사합니다. Joe. 내 내부 무명 기능을 호출하기 위해 여분의 괄호가 있습니다. 제거하면 마커가 표시되지 않습니다. 안타깝게도 솔루션이 작동하지 않습니다 (마커가 표시되지 않음). 또 여분의 괄호를 추가하면 마지막 4 개의 마커 만 표시됩니다. 내가 잘못한 것을 설명 할 수 있고 논리에 따라 제안을 기반으로 설명 할 수 있습니까? 어쩌면 내 문제를 해결하는 데 도움이 될 것입니다 :-) – Filippos
실제 데이터로이 코드가 실행되는 것을 볼 수 있다면 어떨까요? –
사실 jsonObject를 여기에 복사하거나 붙여 넣을 수 있습니까? –