XMLHttpRequest对象详解一

2010-3-5 杜世伟 Ajax

现在很多浏览器 都可以直接从JavaScript中初始化http请求并获取结果。这个http请求对象就是指XMLHttpRequest对象。

一、同步请求
IE里创建XMLHttpRequest对象,使用的是ActiveObject对象。
var oRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
在创建好这个对象后,就可以使用它的open()方法指定发送的请求。该方法有 三个(共有5个,三个可省略)参数,分别是:指定发送的类型(getpost),请求的url,指定发送的方式(同步为false或异步true,默认为true
请求打开后,然后使用send()方法将其发送出去。

二、异步请求

1.       异步:
异步是指ajax应用软件和主机服务器进行联系的方式。如果使用ajax的异步模式,浏览器就不必等待用户的请求操作,也不必更新整个窗口就 可以显示新获取的数据。

2.       XMLHttpRequest对象详解
XMLHttpRequest
对 象是整个Ajax(Asynchronous Javascript And XML)开发的基础。它提供了客户端和服务器端进行异步通信 的能力。一方面它向服务器提交一个请求,获取指定页面的内容,另一方面将指定的数据提交到服务器端。所有的数据经过JavaScript中间层处理,按照需 要的方式对数据进行加工,结合DOMCSS,做出各种Ajax应用程序。    

1)        创建XMLHttpRequest对象

var XMLHttpReq;

//创 建XMLHttpRequest对象

if(window.XMLHttpRequest){//Mozilla浏览器

       XMLHttpReq=new XMLHttpRequest();

}

else if(window.ActiveXObject){//IE浏览器

       try{//IE5.5

XMLHttpReq=new ActiveXObject(“Microsoft.XMLHTTP”);

                            }catch(e){//IE5.0

XMLHttpReq=new ActiveXObject(“Msxm12.XMLHTTP”);

                            }

       }

      

2)        使用open方法指定发送的请求
创建好XMLHttpRequest对象,就可以使用了。
open
方法创建一个请求,并 准备向服务器发送。
open(method, url, asynchronous, user, password);
参数分别为:
method
:指定请求的类 型,为getpost
url
:指定请求的指定,可以是绝对或相对地址,并可带查询字符串
asynchronous
:可 选参数,表示请求是同步还是异步,异步为true,同步为false,默认为true
user
:可选参数,指定请求 的用户名
password
:可选参数, 指定请求的密码
例如:XMLHttpReq.open(“get”, “ajax.jsp?open=creatuser”);//创建一个请求,用get方法请求相对地址为ajax.jsp?open=creatuser的网页

3)        使用send方法发送一个请求
send
body);
body
参数:表示要想服务器 发送的数据,其格式为查询字符串的形式。
例如var body=”user=jack&&sex=male&age=22”;
open方法指定是get方式这些参数作为查询字符串提交。若open方法指定是post方 式这些参数作为httppost方 法提交。
若不发送数据,可以使用XMLHttpReq.send(null);
open方法使用是异步请求,send方法执行后会立即执行下一条语句,若则,send方法一直阻塞,直到请求完成或超时才执行下一条语句。这也是同步和异步的区别

4)        使用onreadystatechange事件捕获请求的状态变化
在发送一个请求后,往往无法知道请求什么时候完成,所以必须利用事件机制来捕获请求的状态。
onreadystatechange
事件可以指定一个事件处理函数来处理XMLHttpRequest对象的执行结果。例如:
XMLHttpReq.onreadystatechange=function(){…//事件处理语句}
事件需在send方法之前进行,以保证请求发送前就有捕获请求状态变化的代码。

Powered by emlog 沪ICP备2023034538号-1