XMLHttpRequest是XMLHTTP组件的对象,通过这个对象,Ajax可以像桌面应用程序一样只同服务器进行数据层面的信息交换,而不用每次都刷新页面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器的负担又加快了响应速度、缩短了用户等待的时间。
XMLHttpRequest是Ajax技术中最重要的一个对象。通过本书第2章中的实例,读者已经初步了解到一个页面在不刷新的情况下可以通过XMLHttpRequest对象发送请求来获取服务器响应。在实际的开发中,设计人员也可以通过使用该对象在不刷新当前页面的情况下更新页面局部的数据。
XMLHttpRequest是浏览器中已定义好的对象,它是Ajax技术的核心组成部分,JavaScript通过它和服务器之间进行通信,并借助它来解析从服务器传回来的XML文件。
我们已经通过前面的实例了解了有关该对象的一些属性和方法。本节将系统的介绍有关XMLHttpRequest对象更多的属性和方法。
需要注意的是,该对象的创建方法是与浏览器相关的。从
IE 5.0
浏览器开始,开发人员可以在
Web
页面内部使用
XMLHTTP ActiveX
组件扩展自身的功能。
Mozilla 1.0
浏览器以及
NetScape 7
浏览器则是创建继承
XML
的代理类
XMLHttpRequest
。在大多数情况下,
XMLHttpRequest
对象和
XMLHTTP
组件都是非常接近,它们的方法和属性基本类似,只是在部分属性上有所不同。下面给出的是在本书第
2
章的案例
2-2
中所使用的相关创建对象的语句。
<script language="javascript">
var XMLHttpReq = false;
//
创建
XMLHttpRequest
对象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) { //Mozilla
浏览器
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
浏览器
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
</script>
虽然在不同的浏览器中创建该对象的方法不同,由于JavaScript脚本语言是动态的,解释型的语言,并且XMLHttpRequest对象在不同的浏览器中是兼容的,因此在实际编程中开发人员可以采用同样的方式使用该对象的属性和方法。
表3-2中列出了XMLHttpRequest对象相关的属性和方法。
表
3-2 XMLHttpRequest
对象的方法
方
法
|
功
能
|
abort()
|
停止当前请求
|
getAllResponseHeaders()
|
把
HTTP
请求的所有响应首部作为键
/
值对返回
|
getResponseHeader("headerLabel")
|
返回指定首部的字符串的值
|
open("method","URL""[,asyncFlag[,"userName"[, "password"]]])
|
建立对服务器的访问。其中
method
参数可以使用
GET
、
POST
及
PUT
,
URL
参数既可以使用绝对地址,也可以使用相对地址,此外还包括与建立连接相关的三个参数
|
send(content)
|
向服务器发送请求
|
setRequestHeader("label", "value")
|
设置
header
并和请求一起发送,即指定首部设置为所提供的值,注意在设置首部前必须先使用
open()
方法
|
在上表中列出的方法里面,open("method","URL""[,asyncFlag[,"userName"[, "password"]]])方法的对应参数一共有5个,其中前面两个是必须的,后面三个是可选的。调用该方法将建立Ajax对服务器的调用,即完成请求初始化的方法。在调用该方法时,需要指定调用的方法,包括GET、POST及PUT,还需要提供所调用资源的URL,此外,boolean类型的asyncFlag[用于指定在进行调用时是采用同步方式还是异步方式,默认为true,即采用异步方式。如果参数值为false,则采用同步方式实现和服务器的交互,即进行等待直到服务器返回响应结果为止。最后两个参数用于在进行连接时指定特定的用户名和密码。
send(content)方法用于具体向服务器发出请求。可以使用的参数包括DOM对象、字符串等等。
setRequestHeader("label", "value")方法是为HTTP请求中给定的一个首部设置值,其中第一个参数表示要设置的首部名称,第二个参数用于指定放在首部中的值。需要注意该方法在使用前必须先调用open()方法。
除了上面的相关方法之外,XMLHttpRequest对象还提供了许多属性,相关属性名称及功能如表3-3所示。
表
3-3 XMLHttpRequest
对象的属性
方
法
|
功
能
|
onreadystatechange
|
状态改变的事件触发器
|
readyState
|
对象状态
(integer):
0 =
未初始化
1 =
读取中
2 =
已读取
3 =
交互中
4 =
完成
|
续表
方
法
|
功
能
|
ResponseText
|
服务器进程返回数据的文本,表示为一个字符串
|
responseXML
|
服务器进程返回数据的兼容
DOM
的
XML
文档对象
|
status
|
服务器返回的状态码
,
如:
404 = "
文件未找到
"
、
200 ="
成功
"
|
statusText
|
服务器返回的状态文本信息(
OK
或者
Not Found
等)
|
其中onreadystatechange属性是状态改变的事件触发器,每个状态改变时都会触发这个事件触发器,通常在触发后会调用一个JavaScript脚本语言编写的函数。