为什么它给了我奇怪的XmlHttpRequest对象的结果?

时间:2011-11-15 08:52:52

标签: javascript xmlhttprequest

我使用以下代码来读取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不会未定义。为什么这样?

2 个答案:

答案 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子句中定义了它的值时,可能没有定义该变量。