我使用以下代码来读取xml
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "/TinyEditor/XML/PreviewBody.xml", true);
xmlhttp.send();
alert(xmlhttp);
var xmlDoc;
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
xmlDoc = xmlhttp.responseXML;
alert(xmlDoc);
}
alert(xmlDoc);
我看到的奇怪的是xmlHttp读取XML,但xmlDoc未定义为错误。 当我应用调试器并跟踪它时,在这种情况下xmlDoc不会未定义。为什么这样?
答案 0 :(得分:2)
默认情况下,ajax
请求(异步 Javascript和XML)是异步的。
这意味着,您过早访问xmlhttp
变量。它没有readyState === 4那时它的状态=== 200。您需要将其放入每次触发的onreadystatechange
处理程序中,当前请求的就绪状态会发生变化。
xmlhttp.onreadystatechange = function() {
var xmlDoc;
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
xmlDoc = xmlhttp.responseXML;
alert(xmlDoc);
}
};
注意,以上是一个非常简约的例子。在现实世界的代码中,您需要制作更多浏览器依赖的东西(主要用于IE)。
答案 1 :(得分:0)
如果未定义的错误来自代码的最后一行,那么它是有意义的,因为在if
子句中定义了它的值时,可能没有定义该变量。