2016-05-22 18 views
-1

GoogleマップにSQLデータベーステーブルから複数のマーカーを表示しようとしています。データをXML形式に変換してマップ上の複数のマーカーに反復する準備ができましたが、ここで問題が発生しています。Googleマップにxmlマーカーが表示される問題

私はすでにこれをやっていましたが、地図上に別のマーカのテーブルを追加しようとしたときに問題が発生しました。それは同じコードの2つのセットが同じであることではありません、ちょうどこのコード部分はどこかで間違っています、そして、私はどこでもそれを見ることができません。

以下に表示されているのは、マップ上で反復してマークするための2つの関数です。

以下の機能が動作します。

downloadUrl("php/setMarkers.php"); 

が、次はしません:

downloadUrl("php/sethospMarkers.php"); 

どちらもXML文書がで呼び出さなっていると応答がGoogleのコンソールに罰金示されており、両方とも正確で同じなので、違いはありません。アプリケーションから "setMarkers"関数を削除しても、この "hospmarkers"関数は機能しません。この機能で何が問題になっていますか?私はちょうど疲れて、基本を見逃していますか?

クロムが表示されていることを、この問題に関連するエラーの一つは次のとおりです。病院機能の次の呼び出し

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

ため

Uncaught TypeError: Cannot read property 'documentElement' of null 

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

?>` 

レスポンスは次のとおりです。

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

出力を投稿してください。 –

+0

XMLヘッダーを送信する前に、PHPスクリプトが何も出力しないことを確認してください(そうでなければヘッダーは表示されません)。送信された)。現在、あなたのコードの中に空白があります。 '<?php' –

+0

私がチェックしたばかりのところでは、空白は不要な空白がないコードを入力したときの編集上の問題です。だからそれは問題ではありません。私は主な問題は、 "varマーカー= xml.documentElementです。"sethospmarkers"関数のgetElementsByTagName( "marker"); "は、次のエラーを返します。"ヌルのプロパティ 'documentElement'を読み取ることができず、前の関数はうまく動作します。 – user1753583

答えて

0

Dr Molleとして提案しました。

名前と電話属性は、上記のようにparseToXML

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

機能を使用する必要がありました。

ありがとうMolle。