Ajax实时验证用户名/邮箱等是否已经存在的代码打包


Posted in PHP onDecember 01, 2011

今天分享一个“利用Ajax技术来检测用户名是否存在”的例子。
利用Ajax技术来检测用户名是否存在的原理流程图:
Ajax实时验证用户名/邮箱等是否已经存在的代码打包

最终结果截图:

Ajax实时验证用户名/邮箱等是否已经存在的代码打包

Ajax实时验证用户名/邮箱等是否已经存在的代码打包

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Ajax检测用户名</title> 
<script type="text/javascript" src="ajax.js"></script> 
</head> 
<body> 
<form name="myform"> 
用户名:<input type="text" name="user" onblur="checkname();"> 
<span id="checkbox"></span> 
</form> 
</body> 
</html>

代码解释:
①实现该功能的核心代码在ajax.js,需要另外引进
②给form命名,因为后面我们需要利用JS来取得input框中的value
③给input框添加一个“onblur”事件,即当“焦点”失去时触发该事件(即流程图的“触发控件”)
④<span id="checkbox"></span>用来放从服务器发送回来的数据(即“用户名已存在”等)
<?php 
mysql_connect("localhost",'root',''); 
mysql_select_db('test'); 
$sql="select * from ajax where name='$_GET[id]'"; 
$query=mysql_query($sql); 
if(is_array(mysql_fetch_array($query))){ 
echo "<font color=red>用户名已存在</font>"; 
}else{ 
echo "<font color=green>用户名可以使用</font>"; 
} 
?>

代码解释:
通过ajax的open方法,将用户输入”用户名“通过id传递给进来(即$_GET[id]),此时将对指定的数据库表中进行查询,检查是否有存在该“用户名”
ajax.js
// JavaScript Document 
var XHR; //定义一个全局对象 
function createXHR(){ //首先我们得创建一个XMLHttpRequest对象 
if(window.ActiveXObject){//IE的低版本系类 
XHR=new ActiveXObject('Microsoft.XMLHTTP');//之前IE垄断了整个浏览器市场,没遵循W3C标准,所以就有了这句代码。。。但IE6之后开始有所改观 
}else if(window.XMLHttpRequest){//非IE系列的浏览器,但包括IE7 IE8 
XHR=new XMLHttpRequest(); 
} 
} 
function checkname(){ 
var username=document.myform.user.value; 
createXHR(); 
XHR.open("GET","checkname.php?id="+username,true);//true:表示异步传输,而不等send()方法返回结果,这正是ajax的核心思想 
XHR.onreadystatechange=byhongfei;//当状态改变时,调用byhongfei这个方法,方法的内容我们另外定义 
XHR.send(null); 
} 
function byhongfei(){ 
if(XHR.readyState == 4){//关于Ajax引擎对象中的方法和属性,可以参考我的另一篇博文:http://www.cnblogs.com/hongfei/archive/2011/11/29/2265377.html 
if(XHR.status == 200){ 
var textHTML=XHR.responseText; 
document.getElementById('checkbox').innerHTML=textHTML; 
} 
} 
}

代码解释:
①首先我们需要声明一个ajax引擎的对象:XHR(随便命名一个)
②因为微软的低版本IE和其他的浏览器创建ajax对象的方式不一样,现在IE和其他浏览器的市场份额几乎各占一半,所以我们得两方面都考虑到,IE-->ActiveXObject;其他-->XMLHttpRequest。我将她封装在一个函数中:createXHR
③我们在index.html中指定的当失去“焦点”时就会触发checkname()函数。那么我们如何将用户输入的“用户名”捕获呢?这里,利用js即可轻松捕获到document.myform.user.value(现在知道为何给form和input命名了吧,这一步对应流程图的“获得填写内容”),有兴趣的博友,可以试试在createXHR()的前一行敲行代码(alert(username)),将捕获到的用户名弹出试试看。
④Ajax引擎有几个方法和属性(可以参考我的另一篇博文:看图理解:普通交互方式和Ajax交互方式区别),使用之前我们得先调用函数craateXHR创建一个ajax对象
⑤有了ajax对象,有三个方法是必不可少的:open()、onreadystatechange、send()。
将请求发送到服务器,要使用open ()和send()方法
open()方法的第一个参数,指示采用GET或者POST方式进行传输。。。。。。
open()方法的第二个参数,指示要请求的URL地址(这里我们请求的是checkname.php文件),可以是绝对或相对地址
open()方法的第三个参数async指示是否采用异步请求,true为采用,这种情况下,通过ajax、js无需等待服务器响应,而是:①在等待服务器响应的同时执行其他脚本②当响应就绪后对响应进行处理。一般对一些小型的请求,async=false也是可以的,但此时就不要编写onreadystatechange 函数了
onreadystatechange事件:当ajax的属性readyState改变时,就触发此事件。在此事件中,当服务器响应已做好被处理的准备时(即readyState=4且status=200时),我们规定要让服务器做什么任务,这里我们规定将从数据库检索到的结果输出到id为”checkbox“的span标签中。
⑥通过checkname.php,查询数据库后,将得到查询结果(即服务器的响应,对应流程图中的”查询数据库“),此时数据还在ajax引擎中,如需获得该来自服务器的响应,我们需要使用XMLHttpRequest对象的responText或responseXML属性,并通过DOM属性innerHTML将从服务器响应回来的数据设置为id=”checkbox“的span标签的值
注:利用ajax监测邮箱是否存在一个道理,我们还可以利用ajax实时监测用户输入的密码强度,此时,需要用到可以把onblur事件改为onfocus事件。
原创 cnblogs 小飞

源码打包下载 /201112/yuanma/checkname_php.rar

PHP 相关文章推荐
两个开源的Php输出Excel文件类
Feb 08 PHP
php中取得URL的根域名的代码
Mar 23 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
帝国cms常用标签汇总
Jul 06 PHP
培养自己的php编码规范
Sep 28 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
PHP常用操作类之通信数据封装类的实现
Jul 16 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
PHP循环语句笔记(foreach,list)
Nov 29 #PHP
openPNE常用方法分享
Nov 29 #PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 #PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 #PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 #PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 #PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 #PHP
You might like
一个简洁的多级别论坛
2006/10/09 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
jquery 查找新建元素代码
2010/07/06 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jQuery获取this当前对象子元素对象的方法
2016/11/29 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
python实现两个文件夹的同步
2019/08/29 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
利用CSS3实现动态的二级三级菜单效果实例源码
2017/01/04 HTML / CSS
SQL面试题
2013/12/09 面试题
放假通知范文
2015/04/14 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书