为何XMLHttpRequest的onload方法定义后无需单独手动调用?
问题解答
你给xhttp.onload赋值的函数本质是事件回调函数,和普通需要主动调用的函数逻辑完全不同。
- 浏览器的JavaScript运行环境内置了XMLHttpRequest的完整事件监听机制,给
onload属性挂载函数的操作,本质是给浏览器注册一个事件通知规则:当这个XHR请求的状态变为「成功完成」时,自动执行这个函数。 - 调用
xhttp.send()之后,整个请求的状态流转由浏览器底层跟踪:从请求发送、等待服务端响应、到响应数据全部接收完成,当浏览器检测到请求成功结束的状态时,就会主动找到你之前挂载在onload上的函数触发执行,还会自动把响应数据、状态码等相关参数传入函数。 - 同类的XHR回调还有
onerror(请求出错时自动触发)、onprogress(响应接收进度更新时自动触发),都是相同的事件驱动逻辑,全部由浏览器在对应事件发生时主动调用,不需要开发者手动执行。
内容的提问来源于stack exchange,提问作者rachit3dev
相关产品推荐
相关产品推荐

