onreadystatechange理解

本文深入解析了onreadystatechange事件处理函数在Ajax请求过程中的作用机制。详细介绍了如何使用XmlHttpRequest对象进行GET请求,以及如何通过readyState属性监测请求状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

onreadystatechange理解

  1. var xmlHttp;
  2. //创建一个XmlHttpRequeset对象
  3. function createXMLHttpRequest(){
  4. if(window.ActiveXObject){
  5. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  6. }
  7. else if(window.XMLHttpRequest){
  8. xmlHttp = new XMLHttpRequest();
  9. }
  10. }
  11. //开始一个请求
  12. function startRequest(){
  13. createXMLHttpRequest();
  14. xmlHttp.onreadystatechange = handlestatechange;
  15. xmlHttp.open("GET", "SimpleRespose.xml", true);
  16. xmlHttp.Send(null);
  17. }
  18. function handlestatechange(){
  19. if(xmlHttp.readyState == 4){//描述一种"已加载"状态;此时,响应已经被完全接收。
  20. if(xmlHttp.status == 200){//200表示成功收到
  21. alert("The Server Replied with:" + xmlHttp.responseText)
  22. }
  23. }
  24. }
xmlHttp.onreadystatechange指向了一个函数,这个函数是在 xmlHttpRequest.readyState发生改变的时候触发。我们再来看startRequest函数,想象一下整个请求发送的步骤。现在我们点击一个按钮,触发了一个startRequest函数。函数往下走,第一步是createXmlHttpRequest(),它的作用是创建一个 xmlHttpRequest对象,当它完毕的时候,xmlHttpRequest.readyState的值是0(window.alert跟踪得到的),程序继续往下走,xmlHttp.onreadystatechange

= handlestatechange,因为状态没有改变(xmlHttpRequest.readyState的值是0),所以不触发函数,紧接着是 Open()和Send(),那么,整个函数从头到尾都应该没有触发handlestatechange函数啊,但是为什么出来的结果是正确的呢?

    后来我用window.alert跟踪xmlHttp.readystate的变化,发现于原来它运行的机制是这样的。首先创建一个 xmlHttpRequest的对象之后xmlHttp.readyState的值是0了,然后xmlHttp.onreadystatechange = handlestatechange没有运行。紧接着是open(),这个函数发生了之后xmlHttp.readyState的值是1了,那么就会有一个断点在Open()函数处断开,保留现场,紧接着又返回到xmlHttp.onreadystatechange = handlestatechange运行,然后再执行Send()函数,这个函数发生了之后xmlHttp.readyState的值是2了,接着又返回到xmlHttp.onreadystatechange = handlestatechange运行。以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值