2016-05-22 7 views
-1

Я пытаюсь отобразить несколько маркеров из таблицы базы данных 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('<','&lt;',$htmlStr); 
$xmlStr=str_replace('>','&gt;',$xmlStr); 
$xmlStr=str_replace('"','&quot;',$xmlStr); 
$xmlStr=str_replace("'",'&#39;',$xmlStr); 
$xmlStr=str_replace("&",'&amp;',$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" /> 

` Могу ли я делать что-то глупое? или у меня проблема синтаксиса? Спасибо в продвинутом состоянии

+0

Пожалуйста, опубликуйте вывод sethospMarkers.php –

+0

Ответ, кажется, в порядке, убедитесь, что PHP-скрипт ничего не выводит (также нет пробелов) перед отправкой XML-заголовка (иначе заголовок не будет отослано). например, в вашем коде есть пробелы перед '

+0

Я только что проверил, пробелы - проблема редактирования, когда я ввел код, нет ненужных пробелов. Так что это не должно быть проблемой. Я думаю, что основной проблемой является «var markers = xml.documentElement.getElementsByTagName («marker»); «в функции« sethospmarkers », поскольку она приносит следующую ошибку:« Невозможно прочитать свойство documentElement »из null», и предыдущая функция работает нормально. – user1753583

ответ

0

As Dr Molle Предлагаемый.

название и телефон атрибуты должны были использовать функцию parseToXML

echo 'name="' . parseToXML($row['name']) . '" '; 
    echo 'phone="' . parseToXML($row['phone']) . '" '; 

, как показано выше.

Thanks Molle.

Смежные вопросы