2014-06-05 66 views
1

我正在處理基於xml內容顯示圖像的內容流。 我正在建設它作爲一個網站,所以它的HTML和JavaScript,並出於一些未知的原因,並相信我已經梳理了齒狀梳的罰款,因爲我可以 - 我的JavaScript只是不加載我的XML(這就是我相當肯定的問題是,但我可能是錯的),它扔我錯誤,'getElementsByTagName'爲空。現在我目前還沒有建立完整的功能,我只是想通過將它讀出來作爲文本來測試xml,所以在這裏忍受着我。'getElementsByTagName'出現undefined

loadXMLDoc.js:

function loadXMLDoc(filename) 
{ 
if (window.XMLHttpRequest) 
{ 
xhttp=new XMLHttpRequest(); 
} 
else // code for IE5 and IE6 
{ 
xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xhttp.open("GET",filename,false); 
xhttp.send(); 
return xhttp.responseXML; 
} 

我在HTML內部Java:

<script> 
xmlDoc = loadXMLDoc("test.xml"); 
    var x = xmlDoc.getElementsByTagName("song"); 
    for (i=0; i<x.length; i++); 
    { 
    var a = (x[i].getElementsByTagName("source")[0].childnodes[0].nodeValue); 
    var b = (x[i].getElementsByTagName("artist")[0].childnodes[0].nodeValue); 
    var c = (x[i].getelementsByTagName("title")[0].childnodes[0].nodeValue); 
    var par = '<img class= "item" href ="#" ondblclick = "confirm()" src ="' +'" "title="' +b+ '"-"'+ c+ ' " />'; 
    document.getElementById("demo").innerHTML += par; 
    } 
</script> 

和完整的錯誤:

遺漏的類型錯誤:無法讀取屬性未定義專輯 '的getElementsByTagName' .html:24 (匿名功能)

和funsies我的XML示例:

<song> 
<source>imgs/Beck.jpg</source> 
<title>Modern Guilt</title> 
<artist>Beck</artist> 
</song> 

希望我涵蓋了所有將有必要,我知道它可能是一些愚蠢的,但我不能釘下來。

+0

也許'xmlDoc'是'undefined'。你測試過哪個瀏覽器?請參閱MDN中的註釋:*「注意:從Gecko 30.0(Firefox 30.0/Thunderbird 30.0/SeaMonkey 2。27),由於對用戶體驗的負面影響,主線程上的同步請求已被棄用。「* –

+0

你是否做過基本的調試以查看它是哪一行代碼以及它是」xmlDoc「還是」x [i ]''undefined'?基本的調試和故障排除應該在你發佈之前完成 – jfriend00

+0

順便說一句,通常在'try..catch中包裝'xhttp = new ActiveXObject(「Microsoft.XMLHTTP」);''因爲你可以如果不支持,將會拋出一個錯誤(儘管很少有瀏覽器應該使用該叉) – RobG

回答

5

首先你有一個「;」這不應該是你在這裏爲循環後:

for (i=0; i<x.length; i++); 
    { 

應該

for (i=0; i<x.length; i++) { 

,因爲這裏發生的一切是你的X上,但不執行你的身體的元素循環迭代。

其次,你

var c = (x[i].getelementsByTagName("title")[0].childnodes[0].nodeValue); 

包含一個錯字,它應該是的getElementsByTagName與AE資本

下面是我使用的代碼,它工作正常:

<!DOCTYPE html> 
<html> 
<head> 
<title>Title of the document</title> 
</head> 
<body> 

<div id="demo"></div> 

<script> 
var loadXMLDoc = function (filename) { 
     var xhttp; 
     if (window.XMLHttpRequest) { 
      xhttp = new XMLHttpRequest(); 
     } else { 
      xhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xhttp.open("GET",filename,false); 
     xhttp.send(); 

     if (xhttp.readyState === 4 && xhttp.status === 200) { 
      return xhttp.responseXML; 
     } 
     return {error : 'file not found'}; 

    }, 
    xmlDoc = loadXMLDoc("test.xml"), 
    testObj = xmlDoc, 
    x = testObj.getElementsByTagName("song"); 
for (i=0; i<x.length; i++) { 
    var objectElem = x[i]; 
    var a = (objectElem.getElementsByTagName("source")[0].textContent), 
     b = (objectElem.getElementsByTagName("artist")[0].textContent), 
     c = (objectElem.getElementsByTagName("title")[0].textContent), 
     par = '<img class="item" href="#" ondblclick="confirm()" src="'+ a +'" title="' +b+ '-'+ c+ '" />'; 
    console.log(par); 
    document.getElementById("demo").innerHTML += par; 
} 
</script> 

</body> 

</html> 

這裏是我的test.xml(與上面的代碼位於相同的文件夾中):

<songlist> 
    <song> 
     <source>imgs/Beck.jpg</source> 
     <title>Modern Guilt</title> 
     <artist>Beck</artist> 
    </song> 
    <song> 
     <source>imgs/Beck2.jpg</source> 
     <title>Modern Guilt2</title> 
     <artist>Beck2</artist> 
    </song> 
</songlist> 
+0

鷹眼!好的工作,在訪問'x [i]'的時刻,'i'已經是' –

+0

謝謝@FelixKling –

+0

有一個錯誤的答案:'它應該是getElementByTagName ...'應該是'getElementsByTagName'。 – RobG

0

萬一它實際上是與異步請求的問題,這是你如何做到這一點異步(我冒昧地在當地申報xhttp,太):

function loadXMLDoc(filename, callback) 
{ 
    var xhttp; 
    if (window.XMLHttpRequest) 
    { 
     xhttp=new XMLHttpRequest(); 
    } 
    else // code for IE5 and IE6 
    { 
     xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xhttp.open("GET",filename,true); 
    xhttp.onreadystatechange = function() 
    { 
     if(xhttp.readyState === 4) 
     { 
      callback(xhttp.responseXML); 
     } 
    } 
    xhttp.send(); 
} 

loadXMLDoc("test.xml", function(xmlDoc) 
{ 
    var x = xmlDoc.getElementsByTagName("song"); 
    for (i=0; i<x.length; i++) 
    { 
     var a = (x[i].getElementsByTagName("source")[0].childnodes[0].nodeValue); 
     var b = (x[i].getElementsByTagName("artist")[0].childnodes[0].nodeValue); 
     var c = (x[i].getElementsByTagName("title")[0].childnodes[0].nodeValue); 
     var par = '<img class= "item" href ="#" ondblclick = "confirm()" src ="' +'" "title="' +b+ '"-"'+ c+ ' " />'; 
     document.getElementById("demo").innerHTML += par; 
    } 
}); 

但要確保的結果web-request的內容類型標頭爲text/xml,否則不會設置resultXML。在任何情況下,你可能想看看文檔:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

編輯:也修復了Adrien Vinches提到的錯別字。