Я пытаюсь реализовать маркеры на моей карте Google на моей странице с помощью названий городов и стран в файле XML. К сожалению, похоже, что я не могу получить глобальный массив (countryList), содержащий объекты страны, чтобы они оставались заполненными вне синтаксического анализатора XML. Используя предупреждение в анализаторе, я вижу, что он содержит 35 элементов, но за его пределами 0. Я ищу некоторое понимание, но я думаю, что это связано с порядком, в котором эти функции загружаются. . Из-за того, что в массиве нет никаких элементов, нет городов, которыми можно было бы заполнить маркеры карты.
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: "GET",
url: "countries.xml",
dataType: "xml",
success: parseXML
});
});
var countryList = [];
function parseXML(xml) {
$(xml).find("country").each(function() {
var name = $(this).find("name").text();
var capital = $(this).find("capital").text();
countryList.push(new CountryObject(name, capital));
});
//alert(countryList.length); this shows a count of 35`enter code here`
}
//alert(countryList.length); this shows a count of 0
function CountryObject(name, capital) {
this.name = name;
this.capital = capital;
}
var geocoder;
var map;
var markersArray = [];
var bounds;
var infowindow = new google.maps.InfoWindow({
content: ''
});
//plot initial point using geocode instead of coordinates (works just fine)
function initialize() {
geocoder = new google.maps.Geocoder();
bounds = new google.maps.LatLngBounds ();
var myOptions = {
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL
}
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
geocoder.geocode( { 'address': 'Toronto Canada'}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
bounds.extend(results[0].geometry.location);
markersArray.push(marker);
}
else{
alert("Geocode was not successful for the following reason: " + status);
}
});
plotMarkers();
}
var locationsArray = [];
for (var j = 0; j < countryList.Length; j++) {
var loc = countryList[j].capital + ' ' + countryList[j].name;
locationsArray[j] = [countryList[j].capital, loc];
}
function plotMarkers(){
var i;
for(i = 0; i < locationsArray.length; i++){
codeAddresses(locationsArray[i]);
}
}
function codeAddresses(address){
geocoder.geocode( { 'address': address[1]}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(address[0]);
infowindow.open(map, this);
});
bounds.extend(results[0].geometry.location);
markersArray.push(marker);
}
else{
alert("Geocode was not successful for the following reason: " + status);
}
map.fitBounds(bounds);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body onload="initialize()">
Изменить: я хочу заполнить маркеры с помощью locationArray, используя информацию, собранную в массиве countryList (вместо жесткого кодирования значений, которые используются в большинстве примеров в Интернете). Однако я не совсем понимаю, что мне не хватает, чтобы сохранить список страны заполненным, и я не слишком знаком с синхронным и асинхронным, кроме того, что я нашел на SO.
1 ответ
Вызов ajax является асинхронным, вам нужно использовать данные внутри процедуры обратного вызова, где они доступны.
Похожие вопросы
Новые вопросы
xml
XML (Extensible Markup Language) - это формат структурированного документа, определяющий правила кодирования текста. При использовании этого тега включайте дополнительные теги, такие как язык программирования, наборы инструментов, используемые технологии XML и другие теги, описывающие среду, в которой опубликована проблема. Гибкость XML обеспечивает широкий спектр применений для передачи человеческих и машинных данных, в том числе конкретных инструментов и библиотек.