XMLHttpRequest对象详解

本文章参考自:《征服Ajax Web 2.0 开发技术详解》为了方便自己日后查阅并与大家共享。

 

1.概述

    XMLHttpRequest对象是整个Ajax开发的基础,提供了客户端和服务器端进行异步通信的能力。XMLHttpRequest对象由JavaScript创建并使用,客户端可以只从服务器端获取需要的信息,通过与DOM和CSS的结合,可以实现局部刷新;同时还可以通过XMLHttpRequest对象异步提交数据,将页面中的数据在后台提交到服务器端而无需刷新页面。

2. 创建XMLHttpRequest对象

    XMLHttpRequest对象不是一个国际标准。在不同的浏览器有不同的表现。所以在实现跨浏览器运行的Ajax应用时,必须考虑所有的使用场合。下面给出了比较通用的创建XMLHttpRequest对象的方法。

var xmlhttp;
	try{
	//IE 5.0 
		xmlhttp = new ActiveXObject('Msxm12.XMLHTTP');
	}catch(e){
		try{
		//IE 5.5 及更高版本
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		}catch(e){
			try{
			//其他浏览器
				xmlhttp = new XMLHttpRequest();
			}catch(e){}
		}
	}

 

3. 使用 Open方法创建请求

    创建好XMLHttpRequest对象后,使用其Open方法,创建一个请求,并准备向服务器发送,其open方法原型如下:

   open(method,url,asynchronous,user,password);

   其中参数含义如下:

  • method: 指请求的类型,一般为get或者post
  • url: 指定请求的地址,可以是绝对地址或相对地址,可以附带查询字符串。
  • asynchronous:可选参数,表示是同步还是异步,异步请求为fasle,同步为true,默认情况下该参数为true。(注:对于这个参数的理解本人还不是完全理解,希望理解的同仁帮忙注释下。
  • user:可选参数,指定请求的用户名,没有则省略。
  • password:可选参数,指定请求的密码,没有则省略。

4. 使用send方法发送一个请求

    使用open方法创建了请求后,可以使用send方法向服务器发送该请求,其原型如下:

    send(body);

    该方法仅有一个body参数,它表示要向服务器发送的数据,其格式为查询字符串的形式。如:

    var body="method=search&parm=java";

    定义了向服务器发送两个名/值对,它们用&符号隔开。如果在open中指定的是get方法,则这些参数作为查询字符串提交,服务器端一般用request.querystring获得;如果采用post方法,则这些参数作为HTTP的post方法提交,服务器端一般用request.form来获取。其中body参数是必须的,如果不发送任何数据,可以使用xmlhttp.send(null)的形式。

    如果在open方法中指定的是异步请求,则send方法执行后会立即执行下一条语句,否则send方法一直阻塞,直到请求完成或超过时才执行下一条语句。这也是同步请求与异步请求之间的区别。

    如果open方法中指定的是用post方法提交请求,那么在send之前必须使用如下的语句设置HTTP头,语法如下:

    xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

5. 使用onreadystatechange事件捕获请求的状态变化

    在发送请求后,一般都是通过事件机制来捕获请求的状态,XMLHttpRequest对象提供了onreadystatechange事件来捕获请求状态信息。

    Onreadystatechange事件可以指定一个事件处理函数处理XMLHttpRequest对象的执行结果,例如:

    xmlhttp.onreadystatechange = function() {

            //事件处理语句

    }

    xmlhttp.open(...);

    xmlhttp.send(...);

    这里将事件绑定在调用open和send方法之前进行,是因为这两个方法都会触发onreadystatechange事件。

6. 使用readyState属性判断请求状态

    onreadystatechange事件是在readyState属性发生时触发的,readyStatea的值表示了当前请求的状态,在事件处理程序中可以根据这个值来进行不同的处理。下表介绍了各个值的含义。

 

readyState值含义
0这也是readyState一开始具有的值,表示对象已经建立,但还未初始化,这时尚未调用open方法
1表示open方法已经调用,但尚未调用send方法
2表示send方法已调用,其数据未知
3表示请求已经发送成功,正在接收数据
4表示数据已接收成功。此时相当于直接使用浏览器打开网页,状态栏显示“完成”字样
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值