2011-03-08 42 views
0

我使用这个代码:为什么这个javascript代码不能处理这个xml文件?

<script type="text/javascript"> 
if (window.XMLHttpRequest) 
{ 
xmlhttp=new XMLHttpRequest(); 
} 
else 
{ 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.open("GET","css/galerii.xml",false) 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 
alert(xmlDoc.getElementsByTagName("GALERIE")[0].childNodes[0].nodeValue); 
</script> 

处理一些XML:

<?xml version="1.0" encoding="UTF-8" ?> 
<GALERIES> 
<GALERIE> 
info 
</GALERIE> 

<GALERIE> 
other info 
</GALERIE> 
</GALERIES> 

但我在警报得到什么,不应该xmlhttp.open( “GET”,“CSS/galerii.xml“,false)如果成功则有值吗?它没有定义。 现在有一个根节点,结果相同。

回答

2

您没有根节点(文档元素),这是XML中的一项要求。

<?xml version="1.0" encoding="UTF-8" ?> 
<GALERIES> 
    <GALERIE> 
    info 
    </GALERIE> 

    <GALERIE> 
    other info 
    </GALERIE> 
</GALERIES> 

对于您的AJAX请求,您也没有onreadystatechange方法。当读取responeXML的代码执行时,XML的http请求尚未返回。您需要关于如何构建AJAX请求读了起来:https://developer.mozilla.org/en/xmlhttprequest

工作例如:http://jsfiddle.net/2F8q6/1/

你的JS修改工作的例子做:

<script type="text/javascript"> 
    if (window.XMLHttpRequest) 
    { 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.open("GET","css/galerii.xml", false); 

    xmlhttp.onreadystatechange = function() 
    { 
     if(xmlhttp.readyState === 4 && xmlhttp.status === 200) 
     { 
      xmlDoc=xmlhttp.responseXML; 
      alert(xmlDoc.getElementsByTagName("GALERIE")[0].childNodes[0].nodeValue); 
     } 
    } 

    xmlhttp.send(); 
</script> 
+0

即使有根节点,我也得到了相同的结果。 – Kesarion 2011-03-08 18:09:50

+0

看到我编辑的答复 – JAAulde 2011-03-08 18:48:57

+0

谢谢你的答案。我在这个脚本中创建了一个新页面,并且我什么也得不到。什么可能是错的。顺便说一句,不应该xmlhttp.open(“GET”,“css/galerii.xml”,false);作为第三个参数有效吗?我尝试了两种方式,但仍然没有。 – Kesarion 2011-03-08 19:20:49

1

XML文档可能只有一个根元素。

1

你需要一个根元素。

<?xml version="1.0" encoding="UTF-8" ?> 
<GALERIES> 
    <GALERIE> 
    info 
    </GALERIE> 
    <GALERIE> 
    other info 
    </GALERIE> 
</GALERIES>