XMLHttpRquest对象

来源:互联网 发布:手机数据接口 编辑:程序博客网 时间:2024/05/28 17:06

属性
1、readystate
[0]:Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
[1]:open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
[2]:Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
[3]:Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。
[4]:Loaded HTTP 响应已经完全接收。
2、responseXML
对请求的响应,解析为 XML 并作为 Document 对象返回。
3 、responseText
如果目前还没有接收到响应体或者响应体未包括头部,则返回空字符串,例readystate小于3,返回空字符串,等于3返回部分响应,等于4返回整个响应体
4、status
由服务器的状态码,200表示成功,404表示“Not Found”
5、statusText
6、upoad

方法
1、onreadystatechange()
每次readystate改变调用改函数
2、abort()
3、send()
4、open(method, url, async, username, password)
async默认false表示同步,true表示异步
5、setRequestHeader(name, value)
6、getResponseHeader()
7、getAllResponseHeader()

事件
1、loadstart
2、load
3、loadend
4、progress
5、abort
6、error
7、timeout

AJAX大家已经都知道了,是为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,Jquery,Css……)重新融合的一个新的知识框架。而,XMLHttpRequest对象则是其中的重重之中。这篇博客重点总结一下这个对象的使用。当然还是按照经典的五步法来学习,以后在实践中有更多更好的想法,会拿出来分享的!首先,需要先了解这个对象的属性和方法:

属性 说明
readyState
表示XMLHttpRequest对象的状态:0:未初始化。对象已创建,未调用open;
1:open方法成功调用,但Sendf方法未调用;
2:send方法已经调用,尚未开始接受数据;
3:正在接受数据。Http响应头信息已经接受,但尚未接收完成;
4:完成,即响应数据接受完成。
Onreadystatechange
请求状态改变的事件触发器(readyState变化时会调用这个属性上注册的javascript函数)。
responseText
服务器响应的文本内容
responseXML
服务器响应的XML内容对应的DOM对象
Status
服务器返回的http状态码。200表示“成功”,404表示“未找到”,500表示“服务器内部错误”等。
statusText
服务器返回状态的文本信息。

方法 说明
Open(string method,string url,boolean asynch,
String username,string password)
指定和服务器端交互的HTTP方法,URL地址,即其他请求信息;
Method:表示http请求方法,一般使用”GET”,”POST”.
url:表示请求的服务器的地址;
asynch:表示是否采用异步方法,true为异步,false为同步;
后边两个可以不指定,username和password分别表示用户名和密码,提供http认证机制需要的用户名和密码。
Send(content)
向服务器发出请求,如果采用异步方式,该方法会立即返回。
content可以指定为null表示不发送数据,其内容可以是DOM对象,输入流或字符串。
SetRequestHeader(String header,String Value)
设置HTTP请求中的指定头部header的值为value.
此方法需在open方法以后调用,一般在post方式中使用。
getAllResponseHeaders()
返回包含Http的所有响应头信息,其中相应头包括Content-length,date,uri等内容。
返回值是一个字符串,包含所有头信息,其中每个键名和键值用冒号分开,每一组键之间用CR和LF(回车加换行符)来分隔!
getResponseHeader(String header)
返回HTTP响应头中指定的键名header对应的值
Abort()
停止当前http请求。对应的XMLHttpRequest对象会复位到未初始化的状态。

对这个对象有了静态了了解,知道它长的什么样子,有什么功能了,下边该我们使用它了,当然这里我也用五步法写出代码来:
第一步:创建XMLHttpRuquest对象:

var xmlhttprequest;     if(window.XMLHttpRequest){         xmlhttprequest=new XMLHttpRequest();         if(xmlhttprequest.overrideMimeType){             xmlhttprequest.overrideMimeType("text/xml");         }     }else if(window.ActiveXObject){         var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];         for(var i=0;i<activeName.length;i++){             try{                 xmlhttprequest=new ActiveXObject(activeName[i]);                 break;             }catch(e){             }         }     }     if(xmlhttprequest==undefined || xmlhttprequest==null){         alert("XMLHttpRequest对象创建失败!!");     }else{         this.xmlhttp=xmlhttprequest;     }  

第二步:注册回调方法

xmlhttp.onreadystatechange=callback;  

第三步:设置和服务器交互的相应参数

 xmlhttp.open("GET","ajax?name=" +userName,true);  

第四步:设置向服务器端发送的数据,启动和服务器端的交互

xmlhttp.send(null);

第五步:判断和服务器端的交互是否完成,还要判断服务器端是否返回正确的数据

//根基实际条件写callback的功能代码  function callback(){       if(xmlhttp.readState==4){           //表示服务器的相应代码是200;正确返回了数据           if(xmlhttp.status==200){               //纯文本数据的接受方法               var message=xmlhttp.responseText;               //使用的前提是,服务器端需要设置content-type为text/xml               //var domXml=xmlhttp.responseXML;               //其它代码           }       }   }  

通过这五步XMLHttpRequest基本上就创建好,可以正常使用了,但是这是需要非常多的代码的,总不能每次创建都写这么多吧?当然不是了,我们学习了面向对象,我们将其必要相同的部分都抽象出来,使之成为一个独立类,别的直接调用即可,在网上看了一个,感觉写的挺好:

//类的构建定义,主要职责就是新建XMLHttpRequest对象  var MyXMLHttpRequest=function(){      var xmlhttprequest;      if(window.XMLHttpRequest){          xmlhttprequest=new XMLHttpRequest();          if(xmlhttprequest.overrideMimeType){              xmlhttprequest.overrideMimeType("text/xml");          }      }else if(window.ActiveXObject){          var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];          for(var i=0;i<activeName.length;i++){              try{                  xmlhttprequest=new ActiveXObject(activeName[i]);                  break;              }catch(e){              }          }      }      if(xmlhttprequest == undefined || xmlhttprequest == null){          alert("XMLHttpRequest对象创建失败!!");      }else{          this.xmlhttp=xmlhttprequest;      }      //用户发送请求的方法      MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){          if(this.xmlhttp!=undefined && this.xmlhttp!=null){              method=method.toUpperCase();              if(method!="GET" && method!="POST"){                  alert("HTTP的请求方法必须为GET或POST!!!");                  return;              }              if(url==null || url==undefined){                  alert("HTTP的请求地址必须设置!");                  return ;              }              var tempxmlhttp=this.xmlhttp;              this.xmlhttp.onreadystatechange=function(){                  if(tempxmlhttp.readyState==4){                      if(temxmlhttp.status==200){                          var responseText=temxmlhttp.responseText;                          var responseXML=temxmlhttp.reponseXML;                          if(callback==undefined || callback==null){                              alert("没有设置处理数据正确返回的方法");                              alert("返回的数据:" + responseText);                          }else{                              callback(responseText,responseXML);                          }                      }else{                          if(failback==undefined ||failback==null){                              alert("没有设置处理数据返回失败的处理方法!");                              alert("HTTP的响应码:" + tempxmlhttp.status + ",响应码的文本信息:" + tempxmlhttp.statusText);                          }else{                              failback(tempxmlhttp.status,tempxmlhttp.statusText);                          }                      }                  }              }              //解决缓存的转换              if(url.indexOf("?")>=0){                  url=url + "&t=" + (new Date()).valueOf();              }else{                  url=url+"?+="+(new Date()).valueOf();              }              //解决跨域的问题              if(url.indexOf("http://")>=0){                  url.replace("?","&");                  url="Proxy?url=" +url;              }              this.xmlhttp.open(method,url,true);              //如果是POST方式,需要设置请求头              if(method=="POST"){                  this.xmlhttp.setRequestHeader("Content-type","application/x-www-four-urlencoded");              }              this.xmlhttp.send(data);      }else{          alert("XMLHttpRequest对象创建失败,无法发送数据!");      }      MyXMLHttpRequest.prototype.abort=function(){          this.xmlhttp.abort();      }    }  }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 起点签到签满了怎么办 ipad锁屏声音小怎么办 扣扣邮箱文件超大了怎么办 网易邮箱图片已过期怎么办 邮箱里面的文件过期了怎么办 邮箱发的文件过期了怎么办 邮箱发送的文件过期怎么办 小米4s开不开机怎么办 小米平板关机后开不开机怎么办 公司老板跑路了社保怎么办 公司老板跑路社保怎么办 公司被公安局查封社保怎么办 小米四开不了机怎么办 小米的手机后壳裂了怎么办 公司没钱拖欠员工社保怎么办 小米note充不进去电怎么办 公司欠社保没交怎么办 公司不给转社保怎么办 小米note充电特别慢怎么办 小米小米note2充电慢怎么办 小米note充电红灯不闪烁怎么办 小米note充电红灯闪烁怎么办 小米note2突然充电慢怎么办 充电小米note2手机闪烁怎么办 小米6x上网慢怎么办 小米5数据上网慢怎么办 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办