DISCUZ架构:AJAX之ajax.js 函数之二
来源:asp之家 发布时间:2009-02-14 08:24:00
有了这些理论的基础就可以分析一下ajax的具体实现了,下面就以注册过程中的检查用户名在数据库是不是存在并给用户提示这样一个ajax过程进行全程分析。
用到如下的几个文件:
./register.php
./ajax.php
./include/javascript/common.js
./include/javascript/ajax.js
./template/default/register.htm
其实register.php这个文件没什么多大的关系,不过register.htm模板是通过它解析过来的,所以就提出来了。
大家都知道在注册过程中是在输完用户名并输入密码的时候才会触发事件检查是不是用户存在,所以很明显,这个是input的onBlur事件。
好了,现在看看./templates/default/register.htm这个文件。
<tr>
<td class="altbg1" width="21%"><span class="bold">{lang username}</span></td>
<td class="altbg2"><div class="input"><input type="text" name="username" size="25" maxlength="15" id="username" onBlur="checkusername()"></div><div id="checkusername"></div>
</td>
</tr>
很简单的HTML代码,注意看到 onBlur="checkusername()"这里,继续往下深入,看看这个函数是做什么的。
function checkusername() {
var username = trim($('username').value);
if(username == lastusername) {
return;
} else {
lastusername = username;
}
var cu = $('checkusername');
var unlen = username.replace(/[^\x00-\xff]/g, "**").length;
if(unlen < 3 || unlen > 15) {
warning(cu, unlen < 3 ? profile_username_tooshort : profile_username_toolong);
return;
}
ajaxresponse('checkusername', 'action=checkusername&username=' + username);
}
第一行是得到username的值,也就是我们输入的,lastusername应该是我们在返回的时候不会让用户名消失用的,应该是写入cookie或者是其他。
接下来判断经过了替换的用户名是不是大于15或者小于3,是的话直接调用warning这个函数(稍后讲这样一个函数)并返回,不是的话就调用ajaxresponse函数发出ajax请求,看看ajaxresponse这个函数就是关键所在了。
function ajaxresponse(objname, data) {
var x = new Ajax('XML', objname);
x.get('ajax.php?inajax=1&' + data, function(s){
var obj = $(objname);
if(s == 'succeed') {
obj.style.display = '';
obj.innerHTML = '<img src=http://www.jz123.cn/text/"{IMGDIR}/check_right.gif" width="13" height="13">';
obj.className = "warning";
} else {
warning(obj, s);
}
});
}
ajaxresponse函数来了,这个作用就是实例化一个ajax对象,注意到我们先前说的recvType,就是第一个传入参数,这里固定成了XML,Discuz喜欢用XML(^^),然后发出请求,这里全部用的是get(第二行),地址是ajax.php?inajax=1&加上传入的参数,所以结合上面就变成:ajax.php?inajax=1&action=checkusername&username=用户名,构造出来了一个URL,(大家可以自己测试一下看看返回的是什么东东,通过http://你的URL/ajax.php?inajax=1&action=checkusername&username=用户名)通过XMLHttpRequest发出去,注意那个处理函数:function(s),实际这个函数作为参数已经写出来了,如果最后返回的是succed,那么就在obj这个层里(在这个例子中对应id='checkusername'这个层)显示一个带勾的图,否则的话还是调用warning这个函数。下面就分析这个函数。
function warning(obj, msg) {
if((ton = obj.id.substr(5, obj.id.length)) != 'password2') {
$(ton).select();
}
obj.style.display = '';
obj.innerHTML = '<img src=http://www.jz123.cn/text/"{IMGDIR}/check_error.gif" width="13" height="13"> ' + msg;
obj.className = "warning";
}
warning函数前面两次提到,其实这个函数很简单,实现的作用就是在obj这个层里打一个叉,然后写上错误的原因,把obj这个层的CSS class设置成为warning。当然,最开始也验证了一下两次密码是否一致,这里就不说了。
猜你喜欢
- 很多电影网站,论坛或其它机构为了方便会员或成员上传电影或者交流文件,都允许用户的上传权限,因为只有允许这个权限,用户才可以上传文件,但这个权
- 前两天,登陆我们的discuz论坛,跳转到uchome后院的时候,状态不是已经登陆上的,但在uchome里面登陆,跳转到discuz论坛,就
- 留白是纸质媒体经常使用的一个技巧。例如报纸版面在配置的时候,并非填充的越满越好,适当的留些空白,不仅美化了版面,而且保证了优质的用户体验。在
- 前些天Google发布了AdSense for Feed,让广大博客可以在Feed中插入AdSense广告来赚钱了,如果博客发布Feed使用
- V5SHOP CEO 讲述网店的三个核心盈利点v5shop的成新东来和大家一起探讨当前甚至今后10年内都非常热门的话题电子商务。其实对于电子
- 昨晚,瑞典的顶级域名系统在例行维护时发生严重问题,导致启动失败,随后引发所有的DNS查询失败,整个瑞典互联网因此而停止。这次乌龙事件发生在当
- 防范DDOS攻击并不一定非要用防火墙。一部份DDOS我们可以通过DOS命令netstat -anmore或者网络综合分析软件:sniff等查
- 现在网站优化比以前稍加难一点,不过只要坚持作去作优化网站同样能达到一定的效果,只是比以前要稍加花费更多的时间和精力。现在114电动车总结一下
- 判断是否存在SQL注入点以下为程序代码:'and 1=1and 1=2' and char(124)%2Buser%2Bch
- 如果你是一个拥有服务器的站长,如果你是在公司负责服务器维护的技术人员,如果你对服务器的安全很有兴趣,您可以看看作者总结的一些windows
- 随着杀毒软件的身躯越来越庞大,资源占用越来越多,“裸奔”的人也越来越多.其实只要有良好的习惯,平时再多加注意,就算不装杀毒软件也威胁不大.但
- 中国开源CMS商业化之路经典回放——风讯网站管理系统系列产品免费公告做为中国开源CMS最早的倡导者,四川风讯科技发展有限公司一直敢为天下先,
- 如果你有自己的主页,需要经常将自己制作的网页文件上传到几个固定的站点,相信你一定会喜欢下面介绍的“可以编程序&r
- 对于一个全职在家工作的互联网营销人员来说,写博客并不是一个获得全职收入的完美解决办法...在我的第一篇文章“中文博客的现
- 网易游戏频道(http://game.163.com)于10月21日起已经能够正常访问。目前的网易游戏频道首页导航上分为产品、玩家和业界三个
- 下面是一个关键字标签"Keywords"的使用样例:<meta name="keywords"
- 在副业上花了太多精力了,是要回归正轨的时候了,时间不多了,加油干啊!现在用笔写不习惯了,只有在电脑上打出来才舒服。把笔记传上来,有了新知识点
- Google PR是现在搜索引擎技术的基石之一,其他搜索引擎不一定叫PR,但肯定也在使用相同的技术。PR值在搜索引擎排名的各个阶段都可能用到
- 目前,网上能找到不少WebMail软件,但多为商业软件,动辄支持百万级用户。它们虽然功能很强,但对一般单位来讲,有点儿“大材小用”。那么,能
- Apache的mod_rewrite是提供了强大URL操作的杀手级的模块,可以实现几乎所有你梦想的URL操作类型,其代价是你必须接受其复杂性