ajax 的 onreadystatechange 事件为何触发多次

看下面的代码和执行的显示结果,思考一下为什么会出现这样的结果,为什么 onreadystatechange 会执行多次。要回答这个问题,我们先来看看 onreadystatechange 的作用。

“onreadystatechange 是一个事件句柄。它的值 (state_Change) 是一个函数的名称,当 XMLHttpRequest 对象的状态发生改变时,会触发此函数。状态从 0 (uninitialized) 到 4 (complete) 进行变化。仅在状态为 4 时,我们才执行代码。” 每次XMLHttpRequest 对象的状态发生改变时,会触发此函数。一共会触发 4 次,从 0 到 4。

  1  < script type = " text/javascript " >
  2  var baseUrl  =   " http://g " ;
  3 
  4  var divObj  =   new  Object();
  5 
  6  divObj.url  =   new  Array();
  7  divObj.url.push( " /index.php/Service/Salaallot " );
  8  divObj.url.push( " /index.php/Service/Salaallot " );
  9  divObj.url.push( " /index.php/Service/Salashelve " );
 10  divObj.url.push( " /index.php/Service/Sbch " );
 11  divObj.url.push( " /index.php/Service/Servicesend " );
 12 
 13  divObj.name  =   new  Array();
 14  divObj.name.push( " Test1 " );
 15  divObj.name.push( " Test2 " );
 16  divObj.name.push( " Test3 " );
 17  divObj.name.push( " Test4 " );
 18  divObj.name.push( " Test5 " );
 19 
 20 
 21  // 创建DIV,DIV1....DIV5
 22  var ajax  =  createAjax();
 23  for (var i = 0 ;i < 1 ;i ++ )
 24  {
 25      var bDiv  =  document.createElement( " div " );
 26      bDiv.setAttribute( " id " , " div_ "   +  i.toString());
 27       if ( ! [ - 1 ,])
 28          bDiv.setAttribute( " cssText " , " width:98%;height:15%;float:left; " );
 29       else
 30          bDiv.setAttribute( " style " , " width:98%;height:15%;float:left; " );
 31      document.body.appendChild(bDiv);
 32      
 33      var tDiv  =  document.createElement( " div " );
 34      tDiv.setAttribute( " id " , " div_ "   +  i.toString()  +   " _t " );
 35       if ( ! [ - 1 ,])
 36          bDiv.setAttribute( " cssText " , " width:100%;height:20%;float:left; " );
 37       else
 38          bDiv.setAttribute( " style " , " width:100%;height:20%;float:left; " );    
 39      bDiv.appendChild(tDiv);
 40      tDiv.innerHTML  =  divObj.name[i];
 41      
 42      var fDiv  =  document.createElement( " div " );
 43      fDiv.setAttribute( " id " , " div_ "   +  i.toString()  +   " _f " );
 44       if ( ! [ - 1 ,])
 45          bDiv.setAttribute( " cssText " , " width:98%;height:80%;float:left; " );
 46       else
 47          bDiv.setAttribute( " style " , " width:98%;height:80%;float:left; " );    
 48      bDiv.appendChild(fDiv);    
 49      ajax.request.open( " GET " , baseUrl  +  divObj.url[i],  true );
 50      ajax.divID  =   " div_ "   +  i.toString();
 51      document.getElementById( " test1 " ).innerHTML  =  document.getElementById( " test1 " ).innerHTML  +   " ---- "   +  ajax.divID;
 52       // alert( ajax.divID );
 53       // if(i==divObj.url.length-1)
 54          ajax.request.onreadystatechange  =  updateDiv;
 55      ajax.request.send( null );
 56  }
 57 
 58 
 59  function updateDiv()
 60  {
 61       // alert( ajax.divID );
 62      document.getElementById( " test " ).innerHTML  =  document.getElementById( " test " ).innerHTML  +   " ---- "   +  ajax.divID;
 63       if  (ajax.request.readyState  ==   4 )
 64      {
 65          if  (ajax.request.status  ==   200 )
 66         {
 67             document.getElementById(ajax.divID).innerHTML  =  ajax.request.responseText;
 68         }
 69      }
 70  }
 71 
 72 
 73 
 74  // 控制事件按顺序执行,托管
 75  function ajaxQueue()
 76  {
 77      
 78      
 79      
 80      
 81  }
 82 
 83 
 84  function createAjax()
 85  {
 86      var request ;
 87       try
 88      {
 89          request  =   new  XMLHttpRequest();
 90      } catch (err){
 91           try
 92          {
 93              request  =   new  ActiveXObject( " Microsoft.XMLHTTP " );
 94          } catch (error){
 95              request  =   new  ActiveXObject( " Msxml2.XMLHTTP " );
 96          }    
 97      }
 98       if ( ! request)
 99      {
100          alert( " createAjax Error! " );
101      } else {
102           this .request  =  request;
103           return   this ;    
104      }
105  }
106 
107 
108 
109  </ script >

 

运行结果,注意红色框框部分。

转载于:https://www.cnblogs.com/chy1000/archive/2010/07/08/1773341.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值