Я пытаюсь отобразить несколько маркеров из таблицы базы данных sql на карты google. Я преобразовал данные в формат XML, готовый к повторению нескольких маркеров на карте, но именно там я получаю проблемы.Отображение маркера xml на карте google maps
Я уже успел сделать это один раз, но когда я попытался добавить еще одну таблицу маркеров на карту, у которой возникли проблемы. Это не так, что два набора одинаковых кодов одинаковы, только этот фрагмент кода где-то не прав, и я не вижу его нигде.
Что вы видите ниже, это 2 функции для итерации и маркировки их на карте.
следующая функция работает:
downloadUrl("php/setMarkers.php");
но следующий не будет:
downloadUrl("php/sethospMarkers.php");
Оба XML документы вызывался в и ответ отображаются нормально в консоли Google и оба то же самое, поэтому нет никакой разницы. Даже когда я удаляю функцию setMarkers из приложения, я не могу заставить эту функцию «приглашенных» работать. Что не так с этой функцией? Я просто устал и пропустил основы?
Одна из ошибок, относящихся к этому вопросу, что хром показывает это:
Uncaught TypeError: Cannot read property 'documentElement' of null
для следующего вызова
var markers = xml.documentElement.getElementsByTagName("marker");
в функции больничного
function initialize() {
var bournemouth = new google.maps.LatLng(50.86244, -1.24778);
var myOptions = {
center: bournemouth,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var infoWindow = new google.maps.InfoWindow;
downloadUrl("php/setMarkers.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var acronym = markers[i].getAttribute("acronym");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + name + "</b> <br/>" + acronym;
var marker = new google.maps.Marker({
map: map,
position: point,
icon: "img/bus.png"
});
bindInfoWindow(marker, map, infoWindow, html);
}
});
downloadUrl("php/sethospMarkers.php", function(data) {
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var name = markers[i].getAttribute("name");
var phone = markers[i].getAttribute("phone");
var html = "<b>" + name + "</b> <br/>" + phone;
var marker = new google.maps.Marker({
map: map,
position: point,
icon: "img/hospital-building.png"
});
bindInfoWindow(marker, map, infoWindow, html);
}
});
function bindInfoWindow(marker, map, infoWindow, html) {
google.maps.event.addListener(marker, 'click', function() {
infoWindow.setContent(html);
infoWindow.open(map, marker);
});
}
function downloadUrl(url,callback) {
var request = window.ActiveXObject ?
new ActiveXObject('Microsoft.XMLHTTP') :
new XMLHttpRequest;
request.onreadystatechange = function() {
if (request.readyState == 4) {
request.onreadystatechange = doNothing;
callback(request, request.status);
}
};
request.open('GET', url, true);
request.send(null);
}
function doNothing() {}
Ниже сценария это конвертер xml, который я использую для подготовки данных, так как вы можете видеть, что это очень просто. это для больничных маркеров.
<?php
require("sql_dbinfo.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// Opens a connection to a MySQL server
$connection=mysqli_connect ('localhost', $username, $password);
if (!$connection) {
die('Not connected : ' . mysql_error($connection));
}
// Set the active MySQL database
$db_selected = mysqli_select_db($connection, $database);
if (!$db_selected) {
die ('Can\'t use db : ' . mysqli_error($connection));
}
// Select all the rows in the markers table
$query = "SELECT * FROM hospmarkers WHERE 1";
$result = mysqli_query($connection, $query);
if (!$result) {
die('Invalid query: ' . mysqli_error($connection));
}
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
// Iterate through the rows, printing XML nodes for each
while ($row = @mysqli_fetch_assoc($result)){
// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'name="' . $row['name'] . '" ';
echo 'phone="' . $row['phone'] . '" ';
echo '/>';
}
// End XML file
echo '</markers>';
?>`
Ответ sethospmarkers выглядит следующим образом.
"<markers><marker lat="53.853" lng="-0.411" name="East Riding Community Hospital" phone="01482 886600" /><marker lat="50.807" lng="-0.500" name="Zachary Merton Community Hospital " phone="01903 858100" /><marker lat="51.140" lng="-0.486" name="Musculoskeletal physiotherapy service - Cranleigh Village Hospital" phone="01483 782400" /><marker lat="51.380" lng="-0.406" name="Walton Community Hospital" phone="01932 414205" /><marker lat="51.315" lng="-0.556" name="Woking Community Hospital (Virgin Care)" phone="01483 715911" />
` Могу ли я делать что-то глупое? или у меня проблема синтаксиса? Спасибо в продвинутом состоянии
Пожалуйста, опубликуйте вывод sethospMarkers.php –
Ответ, кажется, в порядке, убедитесь, что PHP-скрипт ничего не выводит (также нет пробелов) перед отправкой XML-заголовка (иначе заголовок не будет отослано). например, в вашем коде есть пробелы перед ' php' –
Я только что проверил, пробелы - проблема редактирования, когда я ввел код, нет ненужных пробелов. Так что это не должно быть проблемой. Я думаю, что основной проблемой является «var markers = xml.documentElement.getElementsByTagName («marker»); «в функции« sethospmarkers », поскольку она приносит следующую ошибку:« Невозможно прочитать свойство documentElement »из null», и предыдущая функция работает нормально. – user1753583