【IT168技术文档】
Ajax的工作流程分析
在上面的例子中,许多初学者可能搞不清Ajax的具体运行流程,下面对Ajax的工作流程作一个总体介绍。
Ajax的基本工作流程图:

首先,在浏览器客户端创建对应的XMLHttpRequest对象,在login.jsp中找到对应的代码:
上面的代码中,根据不同的浏览器类型创建对应的XMLHttpRequest对象。var http_request = false;
function send_request(url) ...{//初始化、指定处理函数、发送请求的函数
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) ...{}
}
}
if (!http_request) ...{ // 异常,创建对象实例失败
window.alert("不能创建XMLHttpRequest对象实例.");
return false;
}
http_request.onreadystatechange = processRequest;
// 确定发送请求的方式和URL以及是否同步执行下段代码
http_request.open("GET", url, true);
http_request.send(null);
}
接下来,当用户点击“唯一性检查”提交对应的请求以后,即可通过内置的Ajax核心对象XMLHttpRequest以异步的方式发送请求,同时提供对应的表单数据,在login.jsp中相应的代码:
在请求提交之后为Ajax核心对象onreadystatechange指定好响应的函数之后,该监听器就开始工作。接下来浏览器客户端提供的请求被发送到服务器端,这里是validate.jsp页面进行处理,来校验输入的用户名是否是唯一的。function userCheck() ...{
var f = document.form1;
var username = f.username.value;
if(username=="") ...{
window.alert("用户名不能为空。");
f.username.focus();
return false;
}
else ...{
send_request('validate.jsp?username='+username);
}
}
当响应的数据返回浏览器客户端时,在客户端一直监听的Ajax核心对象的onreadystatechange将会监听到对应的响应数据,此时就会按照预先设计好的业务逻辑进行处理,例如采用DOM进行页面的更新处理,本例中使用window对象提供的alert()方法进行提示信息的输出。Login.jspz中处理返回请求的代码:
从上面的例子中可以看出,在Ajax技术中最核心的对象就是XMLHttpRequest,该对象提供了对应的方法和属性来完成向服务器提交请求,以及接收来自服务器端处理的结果等功能。// 处理返回信息的函数
function processRequest() ...{
if (http_request.readyState == 4) ...{ // 判断对象状态
if (http_request.status == 200) ...{ // 信息已经成功返回,开始处理信息
alert(http_request.responseText);
} else ...{ //页面不正常
alert("您所请求的页面有异常。");
}
}
}