2014-06-05 79 views
0

我是XML新手,已經在w3schools網站上做了一些教程。XMLHttpRequest responseText不包括所有的XML

我一直在玩這個教程found here. 這種相互作用與XML found here.

的XML的一個片段:

<CATALOG> 
    <CD> 
     <TITLE>Empire Burlesque</TITLE> 
     <ARTIST>Bob Dylan</ARTIST> 
     <COUNTRY>USA</COUNTRY> 
     <COMPANY>Columbia</COMPANY> 
     <PRICE>10.90</PRICE> 
     <YEAR>1985</YEAR> 
    </CD> 
    <CD> 
     <TITLE>Hide your heart</TITLE> 
     <ARTIST>Bonnie Tyler</ARTIST> 
     <COUNTRY>UK</COUNTRY> 
     <COMPANY>CBS Records</COMPANY> 
     <PRICE>9.90</PRICE> 
     <YEAR>1988</YEAR> 
    </CD> 

現在,當我改變自己的源代碼,這樣的輸出,而不是作爲一個表,僅僅是從xmlhttp對象接收到的responseText就有一個奇怪的現象。每個CD元素都缺少所有TITLE元素 - 所有其他元素都會出現。但是,在調用responseXML時,您可以訪問TITLE元素。

我改變了自己的源代碼,這一點:

<!DOCTYPE html> 
<html> 
<head> 
    <script> 
     function loadXMLDoc(url) { 
      var xmlhttp; 
      var txt, x, xx, i; 
      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) { 
        document.getElementById('txtCDInfo').innerHTML = xmlhttp.responseText; 
       } 
      } 
      xmlhttp.open("GET", url, true); 
      xmlhttp.send(); 
     } 
    </script> 
</head> 
<body> 
    <div id="txtCDInfo"> 
     <button onclick="loadXMLDoc('cd_catalog.xml')"> 
      Get CD info</button> 
    </div> 
</body> 
</html> 

而且我得到的輸出(對空間的緣故,我只包含對應於XML片段輸出包括以上):

Bob Dylan USA Columbia 10.90 1985 Bonnie Tyler UK CBS Records 9.90 1988 

可以看出,每張CD的TITLE都沒有了!

如果我沒有清楚地解釋自己,那麼如果你去教程鏈接並將上面的代碼複製到他們的編輯器中,然後單擊「提交代碼」,然後單擊「獲取CD信息」按鈕,您可以更清楚地看到輸出。

是什麼導致了這個問題?我的大腦疲憊不堪。

在此先感謝您的幫助!

回答

0

問題不是標題沒有被返回,而是你的XML包含一個名爲「title」的標籤,它在HTML中有特殊的含義 - 即它設置頁面的標題。如果再次運行該代碼,您會注意到標籤(或瀏覽器窗口,取決於您的設置)的標題將更改爲「Empire Burlesque」,這是標題標籤在HTML中應該執行的操作。如果您將標籤更改爲<title1></title1>,則會在結果中看到標題。通常情況下,您不希望將XML直接插入HTML頁面,而是需要解析所需的字段。例如,下面的代碼將得到的第一條記錄的標題和藝術家在你的XML,並設置相應的字段:

<!DOCTYPE html> 
<html> 
    <head> 
    <script> 
function loadXMLDoc(url) 
{ 
    var xmlhttp; 
    var txt,x,xx,i; 
    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) 
     { 
      document.getElementById('title').innerHTML = xmlhttp.responseXML.getElementsByTagName("TITLE")[0].childNodes[0].nodeValue; 
      document.getElementById('artist').innerHTML = xmlhttp.responseXML.getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue; 
     } 
    } 
    xmlhttp.open("GET",url,true); 
    xmlhttp.send(); 
} 
    </script> 
    </head> 
    <body> 

    <div id="txtCDInfo"> 
     <button onclick="loadXMLDoc('cd_catalog.xml')">Get CD info</button> 
     <label for="title">Title: </label> 
     <div id="title"></div> 
     <label for="artist">Artist: </label> 
     <div id="artist"></div> 
    </div> 

    </body> 
</html> 

一旦你變得更加舒適與普通的JavaScript,你應該考慮尋找到類似的jQuery - 它提供了許多功能來進行AJAX調用,解析JSON,XML和操縱你的頁面 - 它消除了很多煩人的工作。

+0

感謝您的回答,菲爾。你絕對正確,並挽救我的頭更加震撼!我從來沒有意識到responseText正在返回標籤,我認爲它只是返回標籤內的數據!我沒有理由在頁面上打印responseText,我只是試驗了不同的情況,試圖讓DOM樹順利導航 - 我注意到,當我在responseText上打印時,發生了這種奇怪的事件,我無法弄清楚- 所以謝謝!! – monster

+0

沒問題,很高興幫助。幫助您調試文檔問題的有用工具是包含在大多數主流瀏覽器(例如IE,Firefox,Chrome)中的DOM瀏覽器。你可以右擊頁面的任何部分並說「檢查元素」 - 這將打開一個窗口,顯示DOM的當前內容,這對調試非常有幫助。 – Phil