如果XMLHttpRequestObject被删除和/或不包含任何值,AJAX如何进行反对,因为它也被设置为null?

Jus*_*ten 7 javascript ajax

所以我正在读一本关于AJAX的书,他们正在讨论使用内部函数作为处理多个请求的方法.我明白了,但是在他们使用的这段代码中,我不明白变量XMLHttpRequestObject如何仍然可以使用:

if(XMLHttpRequestObject) 
{
    XMLHttpRequestObject.open(“GET”, dataSource);

    XMLHttpRequestObject.onreadystatechange = function()
    {
        if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) 
        {
            document.getElementById(“targetDiv”).innerHTML = XMLHttpRequestObject.responseText;
            delete XMLHttpRequestObject;
            XMLHttpRequestObject = null;
        }
    }

    XMLHttpRequestObject.send(null);
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是当他们删除时XMLHttpRequestObject,然后,在它被删除之后,他们将其设置为null.然后在它被认为已删除并设置为null之后,它们会使用XMLHttpRequestObject.send(null);但是当XMLHttpRequestObject删除和/或不包含任何值时它如何执行任何操作,因为它也设置为null?

Rol*_*man 1

\n

我的第一个疑虑是当他们删除 XMLHttpRequestObject 时,然后,在据称删除它之后,他们将其设置为 null。

\n
\n\n

不知道他们为什么要这样做。设置为null对我来说似乎足够了,但这也许可以解决一些晦涩的浏览器怪癖。

\n\n
\n

然后,在据称将其删除并设置为 null 后,他们使用 XMLHttpRequestObject.send(null);

\n
\n\n

不。删除发生在事件处理程序内部 - 直到请求完成之后才会调用此事件处理程序函数,并且 xhr 对象的状态发生变化,例如由于服务器发送响应或通信中发生错误。

\n\n

基本上,调用顺序与声明顺序 不同。调用顺序为:

\n\n
XMLHttpRequestObject.open(\xe2\x80\x9cGET\xe2\x80\x9d, dataSource);\n... //assign event handler so it can be called later on\nXMLHttpRequestObject.send(null); \n... //request send, program continues\n\n\n//separate context here, goes off when the readystate of the xhr changes\n//due to server response or error:\nfunction()\n{\n    if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) \n    {\n        document.getElementById(\xe2\x80\x9ctargetDiv\xe2\x80\x9d).innerHTML = XMLHttpRequestObject.responseText;\n        delete XMLHttpRequestObject;\n        XMLHttpRequestObject = null;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n