继上次的用户注册登录案例之后,对其中的部分功能再做进一步改进。上一版中用户提交表单后才对用户名进行校验,虽然做了回显,但还是感觉功能弱了些。为了能有更好用户体验,不是在用户提交表单后才给提示,而是在用户输入用户名后就立即对该用户名进行数据库校验,经过晚上的测试现在可以使用纯js版和jquery版。
  准备工作,先编写好验证用户名重复的后台Servlet程序,然后在jsp或html中使用js对用户名进行验证,当用户输入用户名文本框推动焦点时立即触发验证。
下面是jquery代码。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <% out.clear(); %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>使用ajax进行异步验证</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
body{ font-size:12px;}
table{ font-size:12px;}
table input{ width:120px;}
table em{ color:#ff0000;}
#body{ margin-left:200px; margin-top:220px;}
</style>
<script type="text/javascript" src="Jquery/jquery-1.7.2.min.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function(){
$("#username").focus();
});
var hadoop = function(){
// 异步验证用户是否重复
if($.trim($("#username").val())==""){
$("#message").html("用户名不能为空");
$("#username").focus();
}else{
$.ajax({
type: "post",
url: "dumplicate.do",
data: "username=" + $("#username").val(),
success: function(message){
$("#message").html(message);
}
});
}
};
</script>
</head>
<body>
<div id="body">
<form action="#" method="post">
<table>
<tr>
<td>用户名:</td><td><input type="text" id="username" name="username" onblur="hadoop()" />
</td>
<td>
<em id="message"></em>
</td>
</tr>
<tr>
<td>密码:</td><td colspan="2"><input type="text" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>

下面是js版代码。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%> <% out.clear(); %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>使用ajax进行异步验证</title>
<meta http-equiv="content-type" content="text/xml;charset=utf-8" />
<style type="text/css">
body{ font-size:12px;}
table{ font-size:12px;}
table input{ width:120px;font-size:12px;}
table em{ color:#ff0000;}
.tips{ text-align:right;}
#body{ margin-left:200px; margin-top:220px;}
</style>
<script language="javascript" type="text/javascript">
window.onload=function(){
document.getElementById("username").focus();
};
var xmlhttp;
function hadoop() {
// 1.创建XMLHttpRequest对象
if (window.XMLHttpRequest) {
// IE7,IE8,FireFox,Mozilla,Safari,Opera
xmlhttp = new XMLHttpRequest();
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType("text/xml");
}
} else if (window.ActiveXObject) {
// IE6,IE5.5,IE5
var activexName = [ "MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP" ];
for ( var i = 0; i < activexName.length; i++) {
try {
xmlhttp = new ActiveXObject(activexName[i]);
break;
} catch (e) {
}
}
}
if (xmlhttp == undefined || xmlhttp == null) {
alert('当前浏览器不支持创建XMLHttpRequest对象');
return;
} //2.注册回调函数
xmlhttp.onreadystatechange = callback;
// 注意方法调用后面不加括号
//xmlhttp.onreadystatechange = callback(); // 获取文本框中输入的内容,经过两次编码防止中文乱码
// 后台使用URLDecoder.decode(username,"utf-8")对username解码
var userName = document.getElementById("username").value;
if(userName==""){
document.getElementById("message").innerHTML="用户名不能为空";
$("#username").focus();
return;
}
userName = encodeURI(encodeURI(userName));
// 3.设置和服务器端交互参数
xmlhttp.open("POST", "${pageContext.request.contextPath }/dumplicate.do?username=" + userName, true); // 4.设置向服务器端发送的数据,启动和服务器端的交互
xmlhttp.send(null);
} function callback() {
// 5 .判断和服务器端的交互是否完成,还要判断服务器端是否正确返回了数据
if (xmlhttp.readyState == 4) {
// 表示和服务器端的交互已经完成
if (xmlhttp.status == 200) {
// 表示服务器的响应代码是200,正确的返回了数据
// 纯文本数据的接受方法
var message = xmlhttp.responseText;
// XML数据对应的DOM对象的接受方法
// 使用的前提是,服务器端需要设置content-type为text/xml
// var domXml = xmlhttp.responseXML; //向div标签中填充文本内容的方法
var div = document.getElementById("message");
if(message=="用户名已被注册"){
document.getElementById("username").focus();
document.getElementById("username").select();
}
div.innerHTML = message;
}
}
}
</script>
</head>
<body>
<div id="body">
<form action="#" method="post">
<table>
<tr>
<td class="tips">用户名:</td>
<td>
<input type="text" id="username" name="username" value="祁连山" onblur="hadoop()" />
</td>
<td>
<em id="message">*</em>
</td>
</tr>
<tr>
<td class="tips">密码:</td><td colspan="2"><input type="text" /></td>
</tr>
</table>
</form>
</div>
</body>
</html>

  从上面的代码量就可以看出来jquery的强大之处了,所以有空没空多看看jquery,自己会用才是王道。在这里也感谢一位网名叫牛腩的广西南宁朋友提供js版本,jquery版本出自jquery文档,看来还是得多看文档哪。

使用ajax验证用户名重复的更多相关文章

  1. 使用原生Ajax进行用户名重复的检验

    title: 使用原生Ajax进行用户名重复的检验(一) date: 2019-01-21 17:35:15 tags: [JavaScript,Ajax] --- Ajax的复习 距离刚开始学aja ...

  2. 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  3. 利用jQuery实现的Ajax 验证用户名是否存在

    异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用jQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...

  4. ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  5. Ajax验证用户名是否被注册

    Ajax验证用户名是否被注册 var xmlHttp; function createXMLHttpRequest(){ // 创建XMLHttp请求对象 if(window.ActiveXObjec ...

  6. 11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)

    用ajax验证用户名是否可用 testuid.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...

  7. 基于jQuery实现的Ajax 验证用户名唯一性

    基于jQuery实现的Ajax 验证用户名唯一性 前端jsp页面代码 <tr> <th><span class="requiredField"> ...

  8. 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库

    1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...

  9. Ajax验证用户名

    用Ajax验证用户名: 接口: get guestbook/index.php m : index a : verifyUserName username : 要验证的用户名 返回 { code : ...

随机推荐

  1. JDBC连接mysql时出现的ssl问题

    使用MySQL数据库时出现如下错误: WARN: Establishing SSL connection without server's identity verification is not r ...

  2. 千万别相信鲁大师的硬件測温柔CPU測温功能!!

    非常多人本来随手安装的一个软件. 相信也信任得过它 . 这下让我測试对它失望了.没想到鲁大师这个測温功能实在太搓了!! 白白浪费了我一晚上,  搞来了硅胶 ,弄了几遍  , 还是一样, 还以为买了水货 ...

  3. 优动漫PAINT简简单单绘画绣球花

    本文分享使用优动漫PAINT简简单单绘画绣球花教程: 相关资讯还可以关注http://www.dongmansoft.com 最后告诉你绣球花的花语,还是很和谐美好的呢! 绣球花没有茉莉花的芳香四溢, ...

  4. webpack中optimization 的 runtimeChunk 是干嘛的

    结论:把runtime部分的代码抽离出来单独打包 https://developers.google.com/web/fundamentals/performance/webpack/use-long ...

  5. 捕捉soap的xml形式

    下面是我以前对Php的soap接口进行抓包分析出的结果,这个分析在当服务端或者客户端的Php没有安装soap模块时,可以使用构建xml的方式实现相同的功能 服务端: $data = $HTTP_RAW ...

  6. IIFE 萌新学习笔记

    立即执行函数表达式(IIFE) IIFE:Immediately-Invoked Function Expression(立即执行函数表达式) 一 常用写法: //经常使用的写法(function() ...

  7. fdisk 添加逻辑分区

    [root@riyimei ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommend ...

  8. 紫书 习题 8-22 UVa 1622 (构造法)

    这道题的构造法真的复杂--要推一堆公式--这道题写了几天了--还是没写出来-- 一开始简单的觉得先左右来回, 然后上下来回, 然后把剩下的执行完了好了, 然后就WA. 然后换了个思路, 觉得是贪心, ...

  9. SpringBoot实战(二)Restful风格API接口

    在上一篇SpringBoot实战(一)HelloWorld的基础上,编写一个Restful风格的API接口: 1.根据MVC原则,创建一个简单的目录结构,包括controller和entity,分别创 ...

  10. 【codeforces 816A】Karen and Morning

    [题目链接]:http://codeforces.com/contest/816/problem/A [题意] 让你一分钟一分钟地累加时间; 问多长时间以后是个回文串; [题解] reverse之后如 ...