本文章参考自:《征服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 |
表示数据已接收成功。此时相当于直接使用浏览器打开网页,状态栏显示“完成”字样 |
分享到:
相关推荐
XMLHTTPRequest对象是Web开发中用于实现异步数据通信的关键技术,尤其在JavaScript中广泛使用,使得页面无需刷新就能与服务器交换数据并更新部分内容。这一技术最初由Microsoft引入,但现在已经成为了非官方的标准,...
#### XMLHttpRequest对象详解 XMLHttpRequest对象是AJAX技术的基础,它允许JavaScript异步地从服务器请求数据。下面我们将详细介绍XMLHttpRequest对象的主要属性和方法。 ### 属性介绍 - **readyState**:表示...
### XMLHttpRequest对象详解 #### 一、引言 随着互联网技术的发展与演进,网页应用从简单的静态页面逐渐向动态交互式应用转变。其中,Ajax(Asynchronous JavaScript and XML)技术的出现极大地推动了这一进程。**...
### XMLHTTPRequest对象详解 在现代Web开发中,Ajax(Asynchronous JavaScript and XML)技术的应用非常广泛,它使得网页能够实现局部刷新,提升了用户体验。而这一切的基础便是`XMLHttpRequest`对象,一个用于在...
Ajax的核心在于**XMLHttpRequest对象**,它使得Web应用程序可以在不刷新整个页面的情况下与服务器进行异步通信。 #### 二、XMLHttpRequest对象概述 XMLHttpRequest对象是实现Ajax功能的关键组件。它提供了一种在...
### XMLHTTPRequest对象详解 在现代Web开发中,客户端与服务器之间的数据交换是非常常见的需求之一。为了实现这种异步数据通信,JavaScript提供了一种强大的工具——`XMLHTTPRequest`对象。通过这个对象,开发者...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
第二章 XMLHttpRequest对象详解 第三章 jquery库详解 第四章 基于jquery的应用:电子相册系统 第五章 Ext JS 核心技术详解 第六章 Ext JS界面组件详解 第七章 Prototype库详解 第八章 基于Prototype库的应用:...
XMLHttpRequest对象是JavaScript中用于实现异步HTTP请求的关键工具,它允许前端与服务器进行通信而无需刷新整个网页。在Web开发中,它被广泛应用于AJAX(Asynchronous JavaScript and XML)技术,实现实时更新页面...