2012-05-11 52 views
0

我用下面的代码读取XML文件的价值 -AJAX无法获得财产的childNodes

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有关吗?还是有什么我失踪?

+0

当你去'test3.php'在浏览器中会发生什么? –

回答

0

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

在你的PHP代码,你输出之前任何的XML,你可以设置Content-type头,像这样:

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

非常感谢! – Lamer