2013-02-13 47 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