2.1.1 XMLHttpRequest对象
Ajax应用的特点之一就是无需刷新页面即可向服务器传输或者读写数据(又称无刷新更新页面),这一特点主要得益于XMLHttpRequest对象。这样就可以像桌面应用程序一样,只同服务器进行数据层面的交换,而不用每次都刷新界面,也不用每次将数据处理的工作提交给服务器来做。这样既减轻了服务器的负担又加快了响应速度、缩短了用户等候的时间。
最早应用XMLHTTP 组件的是微软公司,IE(IE5以上)通过允许开发人员在Web页面内部使用XMLHTTP ActiveX组件来扩展自身的功能,开发人员不用通过当前的Web页面导航而直接传输数据到服务器上或者从服务器取回数据。这个功能是很重要的,因为它减少了Web应用由于无状态连接所导致的麻烦,还可以避免下载冗余的HTML,从而提高进程的速度。Mozilla(Mozilla1.0以上及NetScape7以上)做出的回应是创建自有的继承XML代理 类—XMLHttpRequest类。Konqueror和Safariv1.2(基于KHTML的浏览器)也支持XMLHttpRequest对象。而Opera也将在v7.6x+以后的版本中支持XMLHttpRequest对象。对于大多数情况,XMLHttpRequest对象和XMLHTTP组件很相似,方法和属性也类似,只是有一小部分属性不支持。表2-1和表2-2分别列出了XMLHttpRequest对象的方法和属性。
表2-1 XMLHttpRequest对象方法
|
方 法 |
描 述 |
|
abort() |
停止当前请求 |
|
getAllResponseHeaders() |
将HTTP请求的所有响应首部作为键/值对返回 |
|
getResponseHeader("headerLabel") |
返回指定首部的字符串值 |
|
open("method","URL"[,asyncFlag[,"userName" [, "password"]]]) |
建立对服务器的调用,method参数可以是GET、POST或PUT,URL参数可以是相对或绝对URL。该方法还有3个可选参数。 asyncFlag:是否非同步标记 userName:用户名 password:密码 |
|
send(content) |
向服务器发送请求 |
|
setRequestHeader("label", "value") |
把指定首部设置为所提供的值,在调用该方法之前必须先调用open方法 |
表2-2 XMLHttpRequest对象属性
|
属 性 |
描 述 |
|
onreadystatechange |
状态改变的事件触发器,每个状态改变都会触发这个事件触发器 |
|
readyState |
对象状态: 0 = 未初始化 1 = 正在加载 2 = 已加载 3 = 交互中 4 = 完成 |
|
responseText |
服务器的响应,字符串 |
|
responseXML |
服务器的响应,XML。该对象可以解析为一个DOM对象 |
|
status |
服务器返回的HTTP状态码 |
|
statusText |
HTTP状态码的相应文本 |
下面的代码段给出了创建XMLHttpRequest对象并向服务器发送请求的方法:
var xmlhttp;
if (window.ActiveXObject)
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
根据window.ActiveXObject来判断是否是IE浏览器,如果是则创建XMLHTTP ActiveX对象,否则创建XMLHttpRequest对象。
xmlhttp.open("GET", "http://localhost/testAjax");
调用远程服务器,method参数为“GET”。
xmlhttp.onreadystatechange = callback;
为xmlhttp对象设置状态改变事件响应函数。
xmlhttp.send(null);
发送HTTP请求。
function callback()
{
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status == 200) //success
{
//do something...
}
}
}
callback函数是xmlhttp对象的状态改变响应函数,当请求成功完成后,根据应用的需要执行相应的功能。







