Php 谷歌地图问题上的xml标记显示

Php 谷歌地图问题上的xml标记显示,php,xml,google-maps,web,google-maps-markers,Php,Xml,Google Maps,Web,Google Maps Markers,我正在尝试将sql数据库表中的多个标记显示到GoogleMaps。我已经将数据转换成XML格式,准备在地图上迭代成多个标记,但这就是我遇到的问题 我已经试过这样做一次,但是当我尝试在地图上添加另一个标记表时,我遇到了问题。这不是因为有两组相同的相似代码,只是这段代码在某个地方出错了,我在任何地方都看不到 下面是两个函数,用于迭代并在地图上标记它们 以下功能起作用: downloadUrl("php/setMarkers.php"); 但以下情况并非如此: downloadUrl("php/se

我正在尝试将sql数据库表中的多个标记显示到GoogleMaps。我已经将数据转换成XML格式,准备在地图上迭代成多个标记,但这就是我遇到的问题

我已经试过这样做一次,但是当我尝试在地图上添加另一个标记表时,我遇到了问题。这不是因为有两组相同的相似代码,只是这段代码在某个地方出错了,我在任何地方都看不到

下面是两个函数,用于迭代并在地图上标记它们

以下功能起作用:

downloadUrl("php/setMarkers.php");
但以下情况并非如此:

downloadUrl("php/sethospMarkers.php");
两个XML文档都被调用,响应在google控制台中显示得很好,并且都完全相同,因此没有区别。即使我从应用程序中删除“setMarkers”功能,我也无法使该“hospmarkers”功能正常工作。这个函数有什么问题?我是不是太累了,错过了最基本的东西

chrome显示的与此问题相关的错误之一是:

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() {}
函数初始化(){
var bournemouth=新的google.maps.LatLng(50.86244,-1.24778);
变量myOptions={
中心:伯恩茅斯,
缩放:10,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var infoWindow=new google.maps.infoWindow;
下载URL(“php/setMarkers.php”,函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
对于(var i=0;i“+首字母缩写;
var marker=new google.maps.marker({
地图:地图,
位置:点,,
图标:“img/bus.png”
});
bindInfoWindow(标记、地图、infoWindow、html);
}
});
下载URL(“php/sethospMarkers.php”,函数(数据){
var xml=data.responseXML;
var markers=xml.documentElement.getElementsByTagName(“标记”);
对于(var i=0;i“+电话;
var marker=new google.maps.marker({
地图:地图,
位置:点,,
图标:“img/hospital building.png”
});
bindInfoWindow(标记、地图、infoWindow、html);
}
});
函数bindInfoWindow(标记、地图、infoWindow、html){
google.maps.event.addListener(标记'click',函数(){
setContent(html);
信息窗口。打开(地图、标记);
});
}
函数下载url(url,回调){
var请求=window.ActiveXObject?
新的ActiveXObject('Microsoft.XMLHTTP'):
新的XMLHttpRequest;
request.onreadystatechange=函数(){
if(request.readyState==4){
request.onreadystatechange=doNothing;
回调(请求、请求、状态);
}
};
打开('GET',url,true);
请求发送(空);
}
函数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>';

?>`
正如莫勒博士所建议的那样

姓名和电话属性必须使用函数
parseToXML

  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'phone="' . parseToXML($row['phone']) . '" ';
如上所示


谢谢Molle。

请发布sethospMarkers.PHP的输出。响应似乎正常,请确保在发送XML标头之前PHP脚本没有输出任何内容(也没有空格)(否则将不会发送标头).例如,
之前您的代码中目前有空白,我刚检查过,空白是一个编辑问题,当我输入代码时,没有多余的空白。因此这不应该是一个问题。我认为主要问题是“sethospmarkers”上的“var markers=xml.documentElement.getElementsByTagName(“marker”);”函数,因为它会导致以下错误“无法读取null的属性'documentElement',前面的函数工作正常。如上所述,XML本身是正常的,但可能不是完整的XML。您应该使用函数
parseToXML
来清理属性值(姓名、电话等)在打印它们之前,如果某些属性值包含字符,如
&“
  echo 'name="' . parseToXML($row['name']) . '" ';
  echo 'phone="' . parseToXML($row['phone']) . '" ';