XMLHttpRequest 的 readystatechange 事件和 load 事件的区别

分别在 onreadystatechange 和 onload 里写入代码:

xhr.onload = function () {
    console.log(`load:xhr.readyState == ${xhr.readyState} ,xhr.status=${xhr.status}`);
}
xhr.onreadystatechange = function () {
    console.log(`readystatechange:xhr.readyState == ${xhr.readyState} ,xhr.status=${xhr.status}`);
}
xhr.open(...);
xhr.send(...);

输出结果如下:

readystatechange : xhr.readyState == 1 ,xhr.status=200
readystatechange : xhr.readyState == 2 ,xhr.status=200
readystatechange : xhr.readyState == 3 ,xhr.status=200
readystatechange : xhr.readyState == 4 ,xhr.status=200
load : xhr.readyState == 4 ,xhr.status=200

可以看到,readystatechange 事件先于 load 事件执行。load 事件就相当于 readyState 的值为 4 后触发的事件。如果不需要跟踪请求返回之前的过程时,用 load 事件更省事儿。


然而...


load 事件并不总是被触发。比如当网络错误时,目标地址访问不了时,会触发 error 事件,load 事件就不会被触发。404 之类的错误只是服务器返回的状态代码,并不是请求过程错误,所以 load 事件会触发,而 error 事件反而不会触发。

如果需要无论哪种情况都被触发的话,请用 loadend 事件。

OK!既然有 loadend 事件,当然还会有 loadstart 事件!

这些事件的触发顺序是:

readystatechange > loadstart > readystatechange > readystatechange > progress > readystatechange > load / error > loadend 

readystatechange 每次触发时 readyState 值不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值