上文中已经提到过,作为Ajax的核心,XMLHttpRequest对象负责向服务器发送请求并处理服务器的响应。目前版本的IE以ActiveX组件的形式实现了XMLHttpRequest对象;在其他浏览器,例如Firefox、Safari和Opera中,XMLHttpRequest对象是以原生的JavaScript对象的形式提供的。不幸的是,因为存在上述差别,JavaScript代码需要检查浏览器类型,并根据检查结果选择并使用恰当的XMLHttpRequest对象。(在最新的IE7中,微软也将以原生的JavaScript对象形式支持XMLHttpRequest对象。)
令人欣慰的是,相比为了在浏览器之间实现同样的DOM操作而书写的那些意大利面条般的混乱代码,上述过程还是简单了一些:

这段代码比较简单。如果你的浏览器不支持ActiveX对象,调用window.ActiveXObject将返回null,这样xmlHttp对象将被实例化为一个XMLHttpRequest对象(原生的JavaScript对象);否则,xmlHttp对象将被实例化为一个类型为Microsoft.XMLHTTP的ActiveX对象。
现在已经拥有了一个XMLHttpRequest对象,可以尝试着使用它的属性和方法了。在下面的几段中,我将讨论一些使用XMLHttpRequest对象时常用的方法。
open方法用来初始化对服务器的请求。该方法有两个必需的参数(HTTP请求的类型——GET、POST或者PUT,以及将调用的服务器端资源的URL)和三个可选的参数(一个布尔值,代表是否要以异步的形式发送请求,默认值为true;两个字符串,分别代表若服务器需要安全验证时的用户名和密码)。open方法返回void。
![]()
send方法将请求发送给服务器,它接受一个参数,可随请求传递给服务器一些相关内容。如果该XMLHttpRequest对象被声明为异步的(使用上面open方法中提到的那个布尔参数),send方法将立即返回。否则,send方法将被阻塞,直到收到服务器的响应。send方法的那个相关内容参数(该参数是可选的)可以被设定为DOM对象、输入流或是字符串。
![]()
setRequestHeader方法接受两个参数:一个代表首部名称的字符串和一个代表该首部值的字符串。此方法用来设定超文本传输协议(HTTP)中的首部值。
![]()
XMLHttpRequest对象的getAllResponseHeaders方法将返回一个字符串,包含服务器响应中的所有首部信息。例如HTTP 首部中的Content-Length和Date等,以及它们相对应的值。getAllResponseHeaders方法接受一个代表首部名称的字符串参数,并返回一个字符串,代表这个首部的值。
![]()
除了这些方法之外,XMLHttpRequest对象还支持许多属性,由表1-1列出:
表1-1 XMLHttpRequest对象的标准属性集合
|
属 性 |
描 述 |
|
onreadystatechange |
指定当XMLHttpRequest对象的状态变化时调用的函数名称 |
|
readyState |
当前请求的状态(0:未初始化,1:装载中,2:装载完毕,3:交互中,4:完成) |
|
responseText |
以字符串表示的服务器的当前响应 |
|
responseXML |
以XML表示的服务器的当前响应 |
|
status |
服务器的当前HTTP状态码(例如,404代表未找到请求资源(Not Found)) |
|
statusText |
以文字形式表示的服务器的当前HTTP状态(例如Not Found) |







