Ajax引擎
前面讲过,Ajax引擎是由javascript编写的。
第一步:初始化XMLHttpRequest对象。
http_request = false; //开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest) { //Mozilla 浏览器
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) { //设置MiME类别
http_request.overrideMimeType("text/xml");
}
}
else if (window.ActiveXObject) { // IE浏览器
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e){
try{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){ }
}
}
第二步 设置XMLHttpRequest对象的onreadystatechange属性,指定服务器返回响应数据时要调用的回调函数,即指定响应处理函数。
if(responseType.toLowerCase()=="text") {
http_request.onreadystatechange = callback;
}
else if(responseType.toLowerCase()=="xml") {
http_request.onreadystatechange = callback;
}
第三步 调用XMLHttpRequest对象的open 方法,创建http请求。
第四步 调用XMLHttpRequest对象的setResouceHeader等方法,设置必要的http请求头信息。
if(method.toLowerCase()=="get") {
http_request.open(method, url, true);
}
else if(method.toLowerCase()=="post") {
http_request.open(method, url, true);
http_request.setRequestHeader("Content- Type","application/x-www-form- urlencoded");
}
第五步 调用XMLHttpRequest对象的send方法,发送之前创建http请求。
第六步 根据XMLHttpRequest对象的open方法参数,决定等待或者不等待服务器返回响应数据。如果服务器返回响应数据,则将控制权交给之前设置的回调函数。
http_request.send(content);
上述步骤实现了发送请求准备,对于服务器响应的数据在发送XMLHttpRequest请求时即为他指定了回调函数,在回调函数中应该首先判断http请求的状态,之后再做响应的处理;否则在服务器接收http请求到返回响应数据这一段时间内,回调函数会多次执行。回调函数应该以下列顺序执行事务。
第一步 判断http请求的状态,并作相应处理。
if (http_request.readyState == 4)
if (http_request.status == 200)
第二步 调用XMLHttpRequest对象的responseXML或者 responseText方法,将服务器返回的响应数据赋予 javascript变量或者对象。
var doc = http_request.responseXML;
第三步 使用DOM或者其他方式解析服务器返回的响应数 据,保存在缓存变量或者缓存数组中。
var messageList = doc.getElementsByTagName("message");
第四步 使用DOM解析HTML文档,定位目标HTML文档节点。
第五步 使用解析完毕的服务器返回的响应数据,更新上一步解析获取的HTML文档节点的属性值或者内容,从而更新HTML文档页面内容。
简单的说,Ajax引擎就是用javascript编写,使用XMLHttpRequest对象将客户端请求异步发送到服务器端,并对服务器返回的响应数据进行分派,通过指定回调函数进行处理。至于如何处理,要根据返回的数据是reponseXML还是responseText选择相应函数。