Использование PHP для экспорта XML, вытягивание его в DOM через AJAX, но XML не виден - PullRequest
0 голосов
/ 19 декабря 2010

У меня есть PHP-скрипт, который, похоже, производит корректный вывод XML, и я пытаюсь вставить его в браузер с помощью вызова ajax XMLHttpRequest.

После выполнения вызова ajax я вижу в firebug, что запрос был успешным, и xml кажется действительным, но когда я пытаюсь поместить ответ в переменную, я получаю сообщение об ошибке, говорящее, что ответ нулевой.

Вот код PHP:

<?php
$q=$_GET["q"];

$con = mysql_connect('address.com', 'dbnme', 'password');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sql01_5789willgil", $con);

$sql="SELECT * FROM place";

$result = mysql_query($sql);

$xmlResponse = "<?xml version='1.0' encoding='ISO-8859-1'?>\n";
$xmlResponse .= "<placeList>\n";

while($row = mysql_fetch_array($result))
  {
  $xmlResponse .= "<place>\n";
  $xmlResponse .= "<title>". $row['title'] . "</title>\n";
  $xmlResponse .= "<description>" . $row['description'] ."</description>\n";
  $xmlResponse .= "<latitude>" . $row['latitude'] ."</latitude>\n";
  $xmlResponse .= "<longitude>" . $row['longitude'] ."</longitude>\n";
  $xmlResponse .= "<image>" . $row['image'] ."</image>\n";
  $xmlResponse .= "</place>\n";
  }

echo $xmlResponse;

mysql_close($con);
?>

И обидный JavaScript:

//Pull in the xml data for the bubbles
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }

        xmlhttp.onreadystatechange=function()
          {
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
            xmlDoc=xmlhttp.responseXML;  //pull the xml into the DOM
            var x = xmlDoc.getElementsByTagName("place"); //return the contents of the xml file (places) to an array called x
            setupMap();
            }
          }

        xmlhttp.open("GET","getPlaces.php",true);
        xmlhttp.send();

Большое спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 19 декабря 2010

Кажется, вы забыли закрыть корневой узел

// ensure not output before this point
header("Content-type: text/xml"); // good practice
while($row = mysql_fetch_array($result))
{
  ...;
}

$xmlResponse .= "</placeList>\n";
echo $xmlResponse;

Для успешного анализа DOM может потребоваться дополнительный заголовок, указывающий, что ответ является XML-кодом

1 голос
/ 19 декабря 2010

Может быть, xml недействителен в конце концов. Попробуйте прочитать responseText, чтобы увидеть, есть ли у вас какой-либо результат. Кроме того, у PHP есть сам объект DOM для генерации xml. Использование этого облегчит создание правильного XML.

[править]

Насколько я могу судить, вы по крайней мере забыли </placelist> в конце вывода.

И это может быть хорошей идеей, чтобы избежать ваших ценностей. < в заголовке сломает ваш XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...