您的位置:首页 > 理论基础 > 计算机网络

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

2012-03-09 22:08 585 查看
在进行前端开发时经常使用到 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 Ajax
var objXMLHttpRequest;
if(window.ActiveXObject){	//MS IE
var 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 IE
objXMLHttpRequest=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;                     		//请求的url
xMethod="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¶m2=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

位置还没查到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: