XMLHttpRequest的简单认识和原始JS建立该对象方法

来源:互联网 发布:阿里云 ecs 高级教程 编辑:程序博客网 时间:2024/06/08 13:35

在进行前端开发时经常使用到 ajax 进行异步请求获取数据,那么进行 ajax 请求最关键的一步是建立 XMLHttpRequest  对象,然后在利用该对象进行数据异步请求操作,那么现在这里就简单了解一下这个关键的 XMLHttpRequest对象 [更多可以 baidu/google搜索查看更多],

ajax 异步请求,可以在Client端用JS建立,也可以在Server端用ASP,JSP等建立;所以异步请求是面向整个系统和所有程序的,XMLHttpRequest 对象建立是基于系统底层的以 .DLL 文件存在的 COM 组件,新版本的 COM 组件(DLL)中,一般都包含了过去的版本(向下兼容),新版本的 COM 组件 BUG 更少,性能更好,所以优先使用新版本 COM 组件来建立 XMLHttpRequest 对象,DLL文件的在 Window 系统中存在的位置(根据操作系统安装的位置不同和不同版本系统可能有变)见

C:\WINDOWS\system32\msxml.dll //可能还有 msxml2.dll,msxml3.dll,msxml4.dll
C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL //可能还有 MSXML6.DLL

更多各版本DLL文件的位置和其对应的 ProgID,GUID,TypeLib,VersionIndependentProgID信息见后面附加信息


好了废话不多, 看看常用的;


1,XMLHttpRequest对象的属性

[1], onreadystatechange   //只写, 指定readyState变化时的处理函数,即回调函数,必在send方法前设定
[2], readyState   //只读, 返回当前请求状态,有 0--4 五种状态
[3], responseBody  //只读, 响应信息正文以unsign byte数组形式返回
[4], responseStream   //只读, 以Ado Stream 对象的形式返回响应信息
[5], responseText   //只读, 响应信息以字符串形式返回, 默认数据编码为 UTF-8
[6], responseXML   //只读, 响应信息以格式化 XML Document对象返回
[7], status   //只读, 返回当前请求的Http状态码,有多种状态
[8], statusText   //只读, 返回当前请求的响应状态行


(1), 其中 readyState 的值为 0 --4 共5种状态,分别表示如下:

-----------------------------------------------------------------------------------

状态值    ----    含义    ----    描述

-----------------------------------------------------------------------------------

0,请求未初始化,请求对象已经建立,但是还没有初始化,即尚未调用 open() 方法创建 Http 请求

1,请求已经建立,请求对象已经建立,但是还没有调用 send() 方法发送 Http 请求

2,请求已经发送,Send() 方法已经调用,但是当前状态以及 Http 头未知

3,请求处理中,响应中已有部分数据可用了,但是服务器和没有完成响应的生成

4,响应已经完成,数据接受完毕,此时可以用 response 的系列方法获取完整的回应数据


(2), status 属性代表当前 Http 请求的状态:

-----------------------------------------------------------------------------------

状态值    --------    说明

-----------------------------------------------------------------------------------

100,客户必须发出请求

101,客户要求服务器根据请求转换 HTTP 协议版本

2XX,成功请求相关

200,交易成功

201,提示知道新文件的URL

....

3XX,重定向相关

300,请求的资源可在多处得到

301,删除请求数据

....

4XX,客户机中出现的错误相关

400,错误请求,如请求中包含语法错误

404,没有发现文件,查询或URI

...

5XX,服务器中出现的错误相关

500,服务器产生内部错误

501,服务器不支持请求的函数

....

//更多的 Http 请求状态, 可以baidu/google搜索: http请求状态值



2,XMLHttpRequest对象的方法

[1], abort   //停止当前请求; abort()
[2], getAllResponseHeaders   //获取所有Http头, 以键/值对返回;含 Content-Length,Date,URL
[3], getResponseHeader   //从响应中获取指定Http头;getResponseHeader(string header)
[4], open   //创建新的Http请求; 多以open(method,URL,ture)  或open(method,URL,ture, username,pwd) 形式建立
[5], send   //发送请求到Http服务器并接受回应;send(content)
[6], setRequestHeader   //单独指定某个Http头;setRequestHeader(string header, string value)



3, JS 建立 XMLHttpRequest 对象

function createXMLHttpRequst(){//FUNCTION: create XMLHttpRequest object for Ajaxvar objXMLHttpRequest;if(window.ActiveXObject){//MS IEvar activeXNameList=new Array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"); for(var h=0;h<activeXNameList.length;h++){try{   objXMLHttpRequest=new ActiveXObject(activeXNameList[h]);}catch(e){   continue;}if(objXMLHttpRequest) break;}}else if(window.XMLHttpRequest){   //NOT MS IEobjXMLHttpRequest=new XMLHttpRequest();if (objXMLHttp.overrideMimeType){//针对某些特定版本的mozillar浏览器的BUG进行修正objXMLHttp.overrideMimeType("text/xml");}}if(!objXMLHttpRequest){objXMLHttpRequest=false;alert("无法建立 Ajax 请求的  XMLHttpRequest 对象,你的浏览器版本太低,建议升级你的浏览器.");//window.location.href="ajaxError.htm";}return objXMLHttpRequest;}


4, 一个用 JS 进行 AJAX 异步请求的例子

var objXMLHttpReq;                      //全局变量定义objXMLHttpReq=createXMLHttpRequst();    //建立AJAX请求对象function AjaxRequest(xURL){var qURL,xMethod,asynchFlag;   //变量定义qURL=xURL;                     //请求的urlxMethod="GET";                  //请求方式asynchFlag=true;                   //是否异步,默认true异步,false同步if(objXMLHttpReq){ objXMLHttpReq.open(xMethod,qURL+ "?" + escape(new Date()),asynchFlag);  //URL后加个时间戳防止缓存objXMLHttpReq.onreadystatechange=CallbackFunctionName;   //指定返回处理函数名称 objXMLHttpReq.send(null); //xmlhttp.send("param1=value1&param2=value2&...");   //仅用于POST方法}}function CallbackFunctionName(){  //定义回调处理函数if(objXMLHttpReq.readyState==4){if(objXMLHttpReq.status==200){var x=objXMLHttpReq.responseText;//var x=objXMLHttpReq.responseXML;//...处理过程...}}}

附加信息:

Window系统中各版本DLL文件的位置和其对应的 ProgID,GUID,TypeLib,VersionIndependentProgID 信息
注意:根据操作系统安装的位置不同和不同版本系统可能有变,下面是系统安装在C盘下的window系统情况


ProgID=Microsoft.XMLHTTP.1.0 
GUID={ED8C108E-4349-11D2-91A4-00C04F7969E8} 
TypeLib={D63E0CE2-A0A2-11D0-9C02-00C04FC99C8E} 
VersionIndependentProgID=Microsoft.XMLHTTP 
位于C:\WINDOWS\system32\msxml.dll 


ProgID
=Msxml2.XMLHTTP.2.6 
GUID
={f5078f1e-c551-11d3-89b9-0000f81fe221} 
TypeLib={f5078f18-c551-11d3-89b9-0000f81fe221} 
VersionIndependentProgID=Msxml2.XMLHTTP 
位于C:\WINDOWS\system32\msxml2.dll 


ProgID
=Msxml2.XMLHTTP.3.0 
GUID
={F5078F35-C551-11D3-89B9-0000F81FE221} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
VersionIndependentProgID=Msxml2.XMLHTTP 
位于C:\WINDOWS\system32\msxml3.dll 


ProgID
=Msxml2.ServerXMLHTTP.3.0 
GUID
={AFB40FFD-B609-40A3-9828-F88BBE11E4E3} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
VersionIndependentProgID=Msxml2.ServerXMLHTTP 
位于C:\WINDOWS\system32\msxml3.dll 


ProgID
=Msxml2.XMLHTTP.4.0 
GUID
={88D969C5-F192-11D4-A65F-0040963251E5} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
没有VersionIndependentProgID 
位于C:\WINDOWS\system32\msxml4.dll 


ProgID
=Msxml2.ServerXMLHTTP.4.0 
GUID
={88D969C6-F192-11D4-A65F-0040963251E5} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
没有VersionIndependentProgID 
位于C:\WINDOWS\system32\msxml4.dll 


ProgID
=Msxml2.XMLHTTP.5.0 
GUID
={88D969EA-F192-11D4-A65F-0040963251E5} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
没有VersionIndependentProgID 
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL 

ProgID
=Msxml2.ServerXMLHTTP.5.0 
GUID
={88D969EB-F192-11D4-A65F-0040963251E5} 
TypeLib={F5078F18-C551-11D3-89B9-0000F81FE221} 
没有VersionIndependentProgID 
位于C:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSXML5.DLL 

ProgID
=Msxml2.XMLHTTP.6.0 
GUID
=还没查到
TypeLib=还没查到
没有VersionIndependentProgID 
位置还没查到






原创粉丝点击