中国石凳联盟 登录注册

【怨创】Ajax 心得体会之异步提交篇

rockage··4 回复·587 浏览

发表回复


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中绝大多数代码例如初始化之类,都是一些固定内容,完全可以粘贴复制于其他地方。































点赞0 收藏
还没来得及看,先支持一下先,我顶
Being a devil is the same as being a human. We should be kind. If we are kind, we are not a devil, we are a hybrid.
点赞0 收藏

我在QZone也发了这篇东西,M.L.G.B的,代码部分完全被屏蔽,真是弱智到了极点,以纯文本的方式显示这些script,显示而已!显示而已!!又不是运行!!!能产生怎样的安全隐患??看来QQ空间不单用的人是非主流脑残,而且维护的团队也脑残得可以,对自己的安全防范完全没有自信,纯文本显示都害怕,干脆采取一刀切的方针,砍砍砍,带script的内容就砍掉,真是弱智到了顶点,完全无语。
点赞0 收藏
"Verdana"
"Verdana"
input name="username" span id="div1"/span

Being a devil is the same as being a human. We should be kind. If we are kind, we are not a devil, we are a hybrid.
点赞0 收藏
发表回复
发表回复