第21章Ajax&Comet

Ajax(Asynchronous JavaScript + XML)
Ajax技术的核心是XMLHttpRequest对象(简称XHR)
Ajax通信与数据格式无关,这种技术就是无需刷新页面即可从服务器取得数据,但不一定是XML数据。

21.1 XMLHttpRequest对象
IE5是第一款引入XHR对象的浏览器。在IE5中,XHR对象是通过MSXML库中的一个ActiveX对象实现的。
IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR对象,在这些浏览器中可直接使用XMLHttpRequest构造函数。
因此,在IE中可能会遇到三种不同版本的XHR对象,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0。要使用MSXML库中的XHR对象,需要编写一个函数:
这个函数会尽力根据IE中可用的MSXML库的情况创建最新版本的XHR对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 适用于IE7之前的版本 -->
function createXHR(){
<!-- 方法中activeString不存在这个变量 -->
if(typeof arguments.callee.activeString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"];
var i,len;
for(i=0,len = versions.length;i<len;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeString = versions[i];
}catch(e){

}
}
}
return new ActiveXObject(arguments.callee.activeString);
}

XHR的用法:
xhr.open(“请求类型”,”url”,false);//第三个参数表示是否异步发送请求
xhr.send(null);//参数是作为请求体发送的数据,此时请求才真的被发送出去
相应的数据会自动填充xhr对象的属性:responseText、responseXML,status(HTTP状态码),statusText(HTTP状态的说明)
状态码为304表示请求的资源并没有被修改,可以直接使用浏览器中缓存的版本
在异步请求中,需要判定XHR对象的readyState属性值(0,1,2,3,4)
0:未初始化,尚未调用open(),
1:启动,已调用open(),未调用send(),
2:发送,已调用send(),但尚未接到响应
3:接收,接收到部分数据
4:完成,已接收到全部数据

21.2 HTTP头部信息
请求头部:Accept,Accept-Charset,Accept-Encoding,Accept-Language,
Connection,Cookie,Host,Referer,User-Agent
要发送自定义的头部信息,需要在open()之后,send()之前调用setRequestHeader(“key”,”value”);