Ajax作为WEB2.0时代的一个重要支柱之一,其定位不再是单纯的“时髦”,而逐渐演变成动态网页生成必须采用的手段。Ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),念做阿贾克斯,恩,和那个足球队同名,从名字上看它包含三个要素,“异步”,“Javascript”,“XML”,但我个人认为其核心主要着重在“异步”和“Javascript”上面,略去XML,我们仍然可以搭建一个微型的Ajax平台,老规矩,理论的东西留给专家,咱们不多说,下面就以几个实例来说明问题。
首先一定要明确一个基本概念,何谓”异步“,我们必须将思维返回到传统的网页体验上来,现在假设你需要注册一个论坛ID,在注册页面你必须填写许多资料,最后按下提交按钮,然后浏览器转向一个新的网址,告诉你注册成功,或者有一些资料出错了(我们假设是你的用户名已经被抢注),请注意一个细节,当你按下提交按钮的时候,页面是整体刷新的,浏览器实际上导向了一个全新的网址,这个流程可以概括为:
1. 浏览器向服务器提交申请,包括Form中的各个参数
2. 服务器通过对这些参数进行甄别,其中包含许多数据库操作(例如Select id from usertable where id=forms id)
3. 服务器生成返回页面,成功,或者报错
4. 客户端浏览器显示这些页面
以上是传统模式下的一般交互流程,下面来看看Ajax:
同样是注册ID,同样需要填写资料,同样我们以用户名判断来做例子,当你在”用户名“这一栏填写完毕后,用鼠标点一下”电子邮件“这一栏,你会发现,这个时候浏览器已经告诉你”用户名已注册“或者”恭喜你,此ID能使用“的结果了,注意一个细节,那就是你并没有按下”提交”按钮,这个流程可以概括为:
1. 客户端浏览器监视用户的作用行为,当用户输入完用户名-鼠标移动到电子邮件这一栏的时候,javascript产生一个onblur(失去焦点)事件
2. 通过这个事件的触发,运行一段Ajax程序,该程序向服务器提交用户名检验申请,当然,这个过程是静默的,在后台完成,用户并不需要介入
3. 服务器通过传递过来的“用户名”参数进行select查询,并且返回select结果
4. 客户端浏览器接收到服务器传递回来的select结果,对结果进行显示,请注意这个过程没有破坏原有的界面,一切都在后台静默完成
5. 客户端浏览器完成了所有事前检查(包含了很多个Ajax查询),按下“提交”按钮,导向新的网址,注册过程结束(请注意,因为数据已经预先全部验证过了,所以这个提交100%能够一次成功)
从上面的例子可以看出,传统的处理方法可以概括为“整体一次性提交-整体一次性刷新”,而Ajax模式则是“局部多次提交-局部多次刷新”,下面是源代码,首先是客户端:
Ajax.html
script language="javascript"
//Ajax初始化:
function InitAjax()
{
var ajax=false
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP")
} catch (E) {
ajax = false
}
}
if (!ajax typeof XMLHttpRequest!=undefined) {
ajax = new XMLHttpRequest()
}
return ajax
}
function getChange()
{
if (document.form1.username.value != "") // Username不等于空
{
//URL构建
var url = "ajax.asp?username=" + document.form1.username.value
//实例化并发送
var ajax = InitAjax()
ajax.open("GET", url, true)
//获取执行状态回调
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 ajax.status == 200) {
var ReturnStr = ajax.responseText
if (ReturnStr==YES) {
div1.innerHTML = 恭喜你,该名字可以使用!
} else {
div1.innerHTML = 该用户名已被抢注,请选择其他用户名
}
}
}
ajax.send(null)
}
}
/script
html
body
form name="form1"
用 户 名:input name="username" span id="div1"/span
br
电子邮件:input name="email"
/form
/body
/html
-----------------------------------------------------------------------------------------------------------------------------------
然后是服务器端,异常简单的一个asp文件:
Ajax.asp:
%If request("username") = "rockage" Then Response.Write "NO" Else Response.Write "YES" %
-----------------------------------------------------------------------------------------------------------------------------------
大致说下运行流程:
A, 生成HTML界面 -
B,用户输入“用户名" -
C,用户将输入焦点转移到”电子邮件“ (此时触发OnBlur事件,Javascript运行OnChange子程序) -
D,初始化一个Ajax实例 -
E,根据Form中的值生成一个查询URL -
F,向ajax.asp提交该URL申请(请注意,传统模式下,运行到这一步骤已经刷新页面了!)-
G,ajax.asp通过判断返回结果 -
H,该结果触发浏览器中的回调函数 -
I,对结果进行判断 -
J,改变“层“ (DIV1)的文字,通知用户结果
其中,D-J步骤,都是后台静默完成,用户不需要介入
几点说明:
1. 从asp文件可见,只有一个用户名是存在的,那就是"rockage",呵呵
2. 当然这部分你可以扩充,其中可以包含无限复杂的SQL查询,但性质上和本范例一样
3. html部分有一个span元素,那就是层,他和DIV性质上完全一样,只不过span不存在自动空行,而div类似于传统的p,会自动带上空行
4. script中绝大多数代码例如初始化之类,都是一些固定内容,完全可以粘贴复制于其他地方。