关于异步时的打印结果

关于异步时的打印结果

在实例化xhr后xhr.readyState值为0,在xhr.open()之后,xhr.readyState值变为了1.为什么这一次xhr.readyState值的变化没有调用onreadystatechange()函数,从而打印出2.?

所以按照我的推断,最后应该打印4次2.

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

onreadystatechange 事件:当请求被发送到服务器时,需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。 而readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。如下:

0: 请求未初始化

1: 服务器连接已建立

2: 请求已接收

3: 请求处理中

4: 请求已完成,且响应已就绪

参考:

http://img1.sycdn.imooc.com//climg/5bcbee0d0001f40e04150084.jpg

输出结果,状态改变3次,触发了2,3,4状态:

http://img1.sycdn.imooc.com//climg/5bcbee1300013f8201500173.jpg

所以2输出了3次。

祝学习愉快!




  • qq_林二爷_0 提问者 #1
    所以你的意思是在执行send()函数前,属于未接收状态,即使readystate的值从0变化到1,onreadystatechange 事件也不会被触发。只有send()执行之后,才会触发onreadystatechange 事件,然后根据readyState的值从1-2,2-3,3-4这三次变化,从而触发onreadystatechange 事件打印出3次2;我这样理解对不?
    2018-10-21 16:32:13
好帮手慕星星 2018-10-22 10:21:07

可以这样理解,但是和open方法和onreadystatechange事件的前后顺序还是有关系的,如果把open方法放在事件的后面:

http://img1.sycdn.imooc.com//climg/5bcd33e70001658104890069.jpg

结果就是:

http://img1.sycdn.imooc.com//climg/5bcd340b00011f7c00680239.jpg

自己可以测试一下。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师