AJAX无法获取属性childNodes的值

时间:2012-05-11 17:42:36

标签: php xml ajax

我正在使用以下代码来读取XML文件 -

var xmlhttp;
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;

        tmp = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
        alert ('-' + tmp + '-');
    }
}
xmlhttp.open("GET", "test3.php", true);
xmlhttp.send();
  • XML文件

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    </note>
    

如果XML文件名为xxxx.PHP或xxxx.XML以外的任何内容,则会收到错误“无法获取属性childNodes的值”。如果XML文件名为xxxx.XML,则可以正常工作。文件完全相同,唯一的区别是扩展名。

这已经在FF,Chrome和IE中进行了测试,结果相同。这不是缓存问题。

我需要扩展为PHP,因此我可以为AJAX生成动态内容。

这可能与php.ini / apache.conf有关,还是有些东西我不知道?

1 个答案:

答案 0 :(得分:0)

为了让浏览器将XML解释为XML,服务器必须使用正确的Content-type标头(即text/xml)发送它。默认情况下,您的服务器仅对xml文件扩展名执行此操作。

在PHP代码中,在输出任何XML之前,您可以像这样设置Content-type标题:

<?php
  header('Content-type: text/xml');
  // (...generate your XML...)
  echo $xml;
?>