所以我正在读一本关于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?
\n\n\n我的第一个疑虑是当他们删除 XMLHttpRequestObject 时,然后,在据称删除它之后,他们将其设置为 null。
\n
不知道他们为什么要这样做。设置为null
对我来说似乎足够了,但这也许可以解决一些晦涩的浏览器怪癖。
\n\n\n然后,在据称将其删除并设置为 null 后,他们使用 XMLHttpRequestObject.send(null);
\n
不。删除发生在事件处理程序内部 - 直到请求完成之后才会调用此事件处理程序函数,并且 xhr 对象的状态发生变化,例如由于服务器发送响应或通信中发生错误。
\n\n基本上,调用顺序与声明顺序 不同。调用顺序为:
\n\nXMLHttpRequestObject.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
归档时间: |
|
查看次数: |
189 次 |
最近记录: |