Вы пытаетесь перебрать массив findid
, когда он не существует.Есть 2 причины, по которым его не существует:
- Он не объявлен в области, в которой вы пытаетесь перебрать его
- Даже если бы он был, он бы нене может быть определено до после запроса ajax, который вы используете для получения данных XML, завершен
«A» в Ajax означает «асинхронный», что означаетчто, когда вы запрашиваете что-то, ваш код немедленно продолжается и не ждет, пока сервер ответит на запрос.
Что касается первого пункта, функция, которую вы передаете downloadUrl
, проходит по * 1015.* элементы в XML и извлекает много данных в локальные переменные, но на самом деле он ничего не делает с большинством из них.А поскольку они локальные, они не существуют после завершения функции.Фактически, они просто перезаписываются для каждого элемента <marker>
, но это все.
Итак, вместо того, чтобы пытаться перебрать findid
вне функции (там, где ее нет), поместите кодиз цикла в функцию, так что он может фактически получить доступ к созданному там маркеру.
Редактировать
Вот только переписанная функция load
, поэтому она должна работать (вам все еще понадобится остальная часть кода).Я удалил все локальные переменные, потому что вы не используете их ни для чего.В конце вы создаете маркер по широте / долготе - все остальные данные, которые вы не использовали.Если вам что-то нужно, добавьте это позже.
function load() {
var map = new google.maps.Map(document.getElementById("map"), {
center: new google.maps.LatLng(54.312195845815246,-4.45948481875007),
zoom:14,
mapTypeId: 'satellite'
});
var bounds = new google.maps.LatLngBounds();
var markers = [];
downloadUrl("phpfile.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
// loop through the markers in the xml file
for (var i = 0; i < markers.length; i++) {
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("findosgb36lat")),
parseFloat(markers[i].getAttribute("findosgb36lon"))
);
var icon = customIcons[findcategory] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
title: 'Click to view details',
icon: icon.icon,
shadow: icon.shadow
});
// LatLngBounds expects a LatLng object - not a marker object
bounds.extend(point);
}
// fit the map after all the points and markers have been created - i.e. after the loop
map.fitBounds(bounds);
});
}