继上次的用户注册登录案例之后,对其中的部分功能再做进一步改进。上一版中用户提交表单后才对用户名进行校验,虽然做了回显,但还是感觉功能弱了些。为了能有更好用户体验,不是在用户提交表单后才给提示,而是在用户输入用户名后就立即对该用户名进行数据库校验,经过晚上的测试现在可以使用纯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. nyoj 628 小媛在努力 【搜索】

    第一次是直接建一个10^7的数组 结果  内存大的要死.! 是不是能够不建数组 这下好了 小媛在努力 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描写叙述 在多媒体数据处理 ...

  2. srw阅读笔记

    第一章 p11,不要使用we来代表普遍意义上的人们,使用形式主语和被动语态

  3. hdoj--3666--THE MATRIX PROBLEM(差分约束+SPFA深搜)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记

    极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...

  5. C++线程安全退出

    HANDLE m_EvtThreadExit[MaxVisionNum]; //定义 方法一 ;i<MaxVisionNum;i++) m_EvtThreadExit[index] = Crea ...

  6. MetaSploit攻击实例讲解------社会工程学set攻击(kali linux 2016.2(rolling))(详细)

    不多说,直接上干货! 首先,如果你是用的BT5,则set的配置文件是在 /pentest/exploits/set/set_config下. APACHE_SERVER=ONSELF_SIGNED_A ...

  7. Spark 运行机制及原理分析

  8. 深入C#类的方法

    构造函数 example1: static void Main(string [] args) { SE engineer=new SE(); engineer.Age=; enginner.Name ...

  9. 【转载】tom的RUNSTATS测试工具

    -- 创建 runstats 包.其中包括 3 个简单 API 调用: create or replace package runstats_pkg as procedure rs_start; pr ...

  10. 「JavaSE 重新出发」02. 数据类型与运算符

    「TOC」 Java 程序基本要求 Java 数据类型 基本数据类型 复合数据类型 运算符 逻辑运算符 位运算符 运算符优先级 Java 程序基本要求 public class : 一个 Java 文 ...