2012-07-17 57 views
0

我有一个javascript函数,它使得我的服务器上的一个php文件生成一个XML文件(请参阅下面的输出)的http_request。当XML文件返回时,相同的javascript函数解析XML(这是我的问题所在)并将它传递给其他函数;其中大部分处理完成。在Javascript中解析XML的问题

到目前为止,我一直无法解析我的XML文档,我无法弄清楚为什么。

XML

<Results><!--Root--> 
    <Result_Set> 
    <State>State</State> 
    <Cities> 
     <City>City 1</City> 
     <City selected="true">City 2</City> 
     ...ETC... 
    </Cities> 
    <Zipcodes> 
     <Zipcode selected="true">Zipcode 1</Zipcode 
     <Zipcode>Zipcode 2</Zipcode> 
     ...ETC... 
    </Zipcodes> 
    </Result_Set> 
</Results> 

的Javascript

function GetZipInfo(zipcode){ 
    var xmlhttp; 
    var x,resultSet,state,cities,zipcodes 

    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){ 

      resultSet=xmlhttp.responseXML.documentElement.getElementsByTagName("Result_Set") //Function Crashes Here 

      for(x=0;x<resultSet.length;x++){ 
       state=resultSet[x].getElementsByTagName("State")[0].nodeValue; 
       cities=resultSet[x].getElementsByTagName("Cities"); 
       zipcodes=resultSet[x].getElementsByTagName("Zipcodes"); 

       selectState(state) 
       xmlDropdown(cities, "City", "Cities") 
       xmlDropdown(zipcodes, "Zipcode", "Zipcodes") 
      } 
     } 
    } 
    xmlhttp.open("GET","GetZipInfo.php?Zipcode="+zipcode,true); 
    xmlhttp.send(); 
} 

我从来没有解析之前任何语言XML文档,所以我认为这是肯定地说,我完全失去了作为出了什么问题。

预先感谢您!

编辑:事实证明,我的回答是responseText的,而不是responseXML的回来为

responseText的

我使用PHP创建XML页面:

header("Content-Type: text/plain"); 
//Create the DOM 
echo $xmlDoc->saveXML() 

仍然不确定它为什么不以XML形式返回。它可以与echo $ xmlDoc-> saveXML()

编辑:我同意几个意见,我的问题是与我的头在XML文件中。 我在代码中添加了“alert(xmlhttp.responseText)”这一行。其中显示:

<?xml version="1.0"?> 
<!--The Contents of my XML file--> 

是否需要设置编码类型才能正常工作。如果是这样,我怎样才能修改我的PHP代码(见上)以插入该编码?

+1

错误? XML看起来缺少顶级行<?xml version =“1.0”encoding =“UTF-8”?>' – epascarello 2012-07-17 18:55:39

+0

您能调试(检查/记录/警报)xmlhttp.responseXML并告诉我们结果吗? – Bergi 2012-07-17 19:00:51

+0

你得到了什么确切的错误信息? – Bergi 2012-07-17 19:01:18

回答

1

MIME类型你的反应应该是text/xml,或+xmlRFC 3023)结束的东西。

另外,您应该在第一行之前添加一个XML declaration

而且最后但并非最不重要的,虽然getElementsByTagName可以用HTML文档中的所有元素,你应该在XML文档中使用document.getElementsByTagName:在控制台

var resultSet = xmlhttp.responseXML.getElementsByTagName("Result_Set"); 
0

在你的代码的顶部您丢失:

<?xml version="1.0" encoding="UTF-8" ?> 

还缺少 ';'这些行后:

selectState(state) 
xmlDropdown(cities, "City", "Cities") 
xmlDropdown(zipcodes, "Zipcode", "Zipcodes") 

在XML还缺少 '>' 后:

</Zipcode