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(); } } }
- XMLHttpRquest对象
- Ajax系列之二:核心对象XMLHttpRquest
- XMLHTTPRquest 实例
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- 对象
- Atcoder
- Eclipse 常用快捷键
- 期货公司速度哪家强? 期货业掀起装备竞赛
- PAT --- 1014. 福尔摩斯的约会 (20)
- 区块链技术探索(一), 构造比特币的创世区块
- XMLHttpRquest对象
- Android蓝牙通讯(一)————蓝牙功能的相关权限
- tensorflow模型保存与可视化
- Struts2入门案例,自动装配
- 努力加油^-^
- vs开发wince程序
- elementary-tweak
- Struts入门案例
- 链表练习:两个有序链表序列的合并