我是XMLHttpRequest的新手。我不明白为什么我们在send()函数之前编写onload()函数。 onload()函数处理我们收到的响应和send()函数向服务器发送请求。所以onload()必须按照我的理解在send()函数之后编写。有人可以帮助理解这一点。
var xmlhttp = new XMLHttpRequest(),
method = 'GET',
url = 'https://developer.mozilla.org/';
xmlhttp.open(method, url, true);
xmlhttp.onload = function () {
// Do something with the retrieved data
};
xmlhttp.send();
答案 0 :(得分:7)
我不明白为什么我们在
onload()
函数之前编写send()
函数。
因此,在发送请求之前,负载处理程序就位于,因为发送请求将导致调用处理程序(如果成功)。
onload()
函数处理我们收到的响应,send()
函数向服务器发送请求。因此,onload()
必须根据我的理解在send()
函数之后编写。
在send
(由XHR基础设施)(或可能在此期间)调用之后调用。当您将其分配给onload
时,您不会调用它。您只需定义它,以便在XHR需要调用它时将其定义。
以下是发生的事情:
load
事件注册处理程序(在您的情况下,通过为onload
分配一个函数)。send
。
load
事件。这将查找load
的任何当前注册的处理程序,并将调用队列调用(如果有)。只要主JavaScript线程可用于运行它们,就会运行这些调用。很多时候,你会以错误的方式离开,因为当请求完成时,你会把load
处理程序放在那里;但不是 总是 。 load
是一个事件。如果可以立即满足请求(例如,从缓存中),则浏览器可以在load
期间触发send
,并查看是否有{{}} {在对load
的调用期间{1}}处理程序,如果没有,则不会将调用排入任何回调。稍后当您附加处理程序时,事件已被触发(当没有附加时)。
所以你必须在调用send
之前附加处理程序。