打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ajax发送一次请求,多次响应或者xmlHttp.onreadystatechange 多次调用问题
现象:在ajax 中,通过load()方法,明明只发送了一遍的post 请求,调用了一个处理方法。
function load()
{
 var url = "";
 var xml="";
 url = "../worker/worker_dutyrecord_start.do?curDate=" + new Date().getTime();
 createXMLHttpRequest(); 
 xmlHttp.open( "post", url, true );    
 xmlHttp.onreadystatechange = build1; 
 xmlHttp.setRequestHeader( "Content-Type", requestHeader_urlencoded ); 
 xmlHttp.send( xml )
 }
function build1()

  //直接写处理的方法。  
}
结果:build1,被调用了4次。既 xmlHttp.onreadystatechange 执行了四次。
原因:XMLHTTPREQUES会返回5种不同的状态,客户端接受每个状态。
5种请求:
0(uninitialized,未初始化):对象已经创建,但还没有调用open()方法;
1(loading,载入中):open()方法已经调用,但请求还没有发送;
2(loaded,已载入):请求已经发送;
3(interactive,交互中):已经接收到部分响应;
4(complete,完成):所有数据都已经收到,连接已经关闭。
5中响应:
200(OK):找到了该资源,并且一切正常;
304(NOT MODIFIED):该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制;
401(UNAUTHORIZED):客户端无权访问该资源。这通常会使得浏览器要求输入用户名和密码,以登录到服务器;
403(FORBIDDEN):客户端未能获得授权。这通常是在401之后输入了不正确的用户名和密码;
404(NOT FOUND):在指定的位置不存在所申请的资源。(这估计是我们碰到最多的问题)
解决方案:(改写build1方法)
function build1()

 if( xmlHttp.readyState == 4 )
 {
  if( xmlHttp.status == 200 )
  {
        //直接写处理的方法。  
     }
  }
}
这样就可以解决出现的返回多变结果的问题。
 

 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ajax的经典示例
使用JavaScript 和Ajax 发出异步请求(二)
Ajax第一阶段学习
Start AJAX
AJAX - 向服务器发送请求
【javascript】ajax 基础
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服