2016-05-22 11 views
-1

Ich versuche, mehrere Markierungen aus einer SQL-Datenbank-Tabelle zu Google Maps anzuzeigen. Ich habe die Daten in ein XML-Format konvertiert, das bereit ist, in mehrere Markierungen auf der Karte eingefügt zu werden, aber hier bekomme ich Probleme.XML-Marker Anzeige in Google Maps Problem

Ich habe es schon einmal geschafft, aber wenn ich versucht habe, eine weitere Tabelle mit Markierungen auf der Karte hinzuzufügen, habe ich Probleme. Es ist nicht so, dass zwei Sätze ähnlicher Codes gleich sind, nur ist dieser Code irgendwo falsch und ich kann ihn nirgends sehen.

Was Sie unten sehen, sind 2 Funktionen zum Durchlaufen und Markieren auf der Karte.

die folgende Funktion funktioniert:

downloadUrl("php/setMarkers.php"); 

aber folgendes nicht:

downloadUrl("php/sethospMarkers.php"); 

Beide XML-Dokumente in genannt werden immer und die Antwort sind in Ordnung in der Google-Konsole angezeigt und sind beide genau das gleiche, also gibt es keinen Unterschied. Selbst wenn ich die "setMarkers" -Funktion aus der Anwendung entferne, kann ich diese "hosparkers" -Funktion nicht ausführen. Was ist falsch an dieser Funktion? Bin ich nur zu müde und vermisse die Grundlagen?

Einer der Fehler auf diese Frage beziehen, die zeigt Chrome ist:

Uncaught TypeError: Cannot read property 'documentElement' of null 

für den folgenden Aufruf

var markers = xml.documentElement.getElementsByTagName("marker"); 

im Krankenhaus Funktion

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() {} 

Das folgende Skript ist der XML-Konverter, den ich verwende, um die Daten vorzubereiten, wie Sie sehen können, ist es sehr einfach. Dies ist für die Marker des Krankenhauses.

<?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>'; 

?>` 

Die Antwort von sethospmarkers ist wie folgt.

"<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" /> 

` mache ich einen etwas albern? oder habe ich ein Syntaxproblem? Vielen Dank im Voraus

+0

Bitte schreiben Sie die Ausgabe von sethospMarkers.php –

+0

Die Antwort scheint in Ordnung zu sein, stellen Sie sicher, dass das PHP-Skript nichts ausgibt (auch keine Leerzeichen), bevor Sie den XML-Header senden (ansonsten wird der Header nicht sein) gesendet). zum Beispiel gibt es momentan Leerzeichen in Ihrem Code bevor

+0

Ich habe gerade überprüft, die Leerzeichen sind ein Bearbeitungsproblem, wenn ich den Code eingegeben habe, es gibt keine unnötigen Leerzeichen. Das sollte also kein Problem sein. Ich denke, das Hauptproblem ist die "var markers = xml.documentElement.getElementsByTagName ("marker"); "auf der" sethospmarkers "-Funktion, da es den folgenden Fehler bringt" Kann die Eigenschaft 'documentElement' von null nicht lesen und die vorherige Funktion funktioniert einwandfrei. – user1753583

Antwort

0

Wie Dr. Molle vorgeschlagen.

Der Name und das Telefon Attribute hatten die Funktion oben parseToXML

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

wie gezeigt zu verwenden.

Danke Molle.