2013-02-13 46 views
0

我認爲在我的腳本中存在某種非致命錯誤,它不允許我使用Firebug來調試腳本,並且b /導致Firefox在我處於連接狀態時不斷顯示正在連接...(與嗖嗖聲)這一頁。腳本似乎運行良好,但。非致命Javascript錯誤?

任何想法可能導致什麼?

<script type="text/javascript"> 
var xmlHttp; 
var xmlDoc; 

loadXMLFile(); 

function loadXMLFile() 
{ 
    xmlHttp = new window.XMLHttpRequest(); 
    xmlHttp.open("GET", "myFile.xml", true); 
    xmlHttp.onreadystatechange = StateChange; 
    xmlHttp.send(null); 
} 

function StateChange() 
{ 
    if (xmlHttp.readyState == 4) 
    { 
     xmlDoc = xmlHttp.responseXML; 
     processXML(); 
    } 
} 

function processXML() 
{ 
    var firstNames = xmlDoc.querySelectorAll("name"); 
    if (firstNames == null) 
    { 
     document.write("Oh poo. Query selector returned null."); 
    } 
    else 
    { 
     for (var i = 0; i < firstNames.length; i++) 
     { 
      document.write(firstNames[i].textContent + "<br>"); 
     } 
    } 
} 
</script> 
+0

它的壞的形式使用'document.write()的'。 – 2013-02-13 07:28:08

+0

頁面解析後使用'document.write()'是非常致命的; )。 – Teemu 2013-02-13 07:40:47

+0

我只是試圖從XML上打印頁面上的東西,並且很快並且很髒。在下面的HTML之前,腳本(也就是'document.write()')沒有被解析?該代碼存在於'' – Vexir 2013-02-13 18:47:02

回答

1

頁面中的所有代碼都會被解析,但在頁面完成之前不會被執行。發生這種情況,因爲您從onreadystatechange事件處理函數調用document.write()而不是解析時間。

在這種情況下,document.write()隱含地調用document.open(),它將頁面中的所有代碼都擦除,只剩下document.write()所寫的文本。此外,document處於打開狀態,導致瀏覽器「忙碌」。這可以通過使用document.close()來避免,但它不會阻止原始內容消失。

您需要添加一個元素到body,然後使用一些「真正的」DOM操作方法。事情是這樣的:

<div id="qResult"></div> 

代替document.write()然後:

document.getElementById('qResult').innerHTML = WHAT_EVER_NEEDED 
+0

謝謝!理解發生了什麼真是太好了,即使對於像document.write()這樣的糟糕的表單函數也是如此。 – Vexir 2013-02-14 21:47:33