2012-07-17 84 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