使用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="">
<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]),此时将对指定的数据库表中进行查询,检查是否有存在该“用户名”
// 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引擎对象中的方法和属性,可以参考下面文章:
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事件。
上一篇: Go语言并发爬虫的具体实现
下一篇: Centos8搭建基于kdc加密的nfs
推荐阅读
-
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程
-
使用Ajax实时检测"用户名、邮箱等"是否已经存在
-
Ajax实时验证用户名/邮箱等是否已经存在的代码打包_PHP教程
-
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
-
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
-
PHP+Ajax检测用户名或邮件注册时是否已经存在实例教程_PHP
-
使用Ajax实时检测"用户名、邮箱等"是否已经存在
-
Ajax实时验证用户名/邮箱等是否已经存在的代码打包_php实例
-
我在检测用户名是否存在时,这样写ajax执行会有延迟,怎么根据输入的内容实时检测出来。
-
AJAX asp.net分页 Ajax实时验证用户名/邮箱等是否已经存在的代码打包