使用ajax验证用户名重复
继上次的用户注册登录案例之后,对其中的部分功能再做进一步改进。上一版中用户提交表单后才对用户名进行校验,虽然做了回显,但还是感觉功能弱了些。为了能有更好用户体验,不是在用户提交表单后才给提示,而是在用户输入用户名后就立即对该用户名进行数据库校验,经过晚上的测试现在可以使用纯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验证用户名重复的更多相关文章
- 使用原生Ajax进行用户名重复的检验
title: 使用原生Ajax进行用户名重复的检验(一) date: 2019-01-21 17:35:15 tags: [JavaScript,Ajax] --- Ajax的复习 距离刚开始学aja ...
- 11月10日上午ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- 利用jQuery实现的Ajax 验证用户名是否存在
异步刷新实现方式有多种,也可以借助JS的多种框架,下面是使用jQuery框架实现的AJAX 验证用户名是否存在 jQuery.ajax概述 HTTP 请求加载远程数据. 通过jQuery 底层 AJA ...
- ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- Ajax验证用户名是否被注册
Ajax验证用户名是否被注册 var xmlHttp; function createXMLHttpRequest(){ // 创建XMLHttp请求对象 if(window.ActiveXObjec ...
- 11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
用ajax验证用户名是否可用 testuid.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- 基于jQuery实现的Ajax 验证用户名唯一性
基于jQuery实现的Ajax 验证用户名唯一性 前端jsp页面代码 <tr> <th><span class="requiredField"> ...
- 14.ajax基础知识、用ajax做登录页面、用ajax验证用户名是否可用、ajax动态调用数据库
1.ajax的基础知识 ajax是结合了jquery.php等几种技术延伸出来的综合运用的技术,不是新的内容.ajax也是写在<script>标签里面的. 如果使用ajax一定是要有1个处 ...
- Ajax验证用户名
用Ajax验证用户名: 接口: get guestbook/index.php m : index a : verifyUserName username : 要验证的用户名 返回 { code : ...
随机推荐
- nyoj 628 小媛在努力 【搜索】
第一次是直接建一个10^7的数组 结果 内存大的要死.! 是不是能够不建数组 这下好了 小媛在努力 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 在多媒体数据处理 ...
- srw阅读笔记
第一章 p11,不要使用we来代表普遍意义上的人们,使用形式主语和被动语态
- hdoj--3666--THE MATRIX PROBLEM(差分约束+SPFA深搜)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Mysql实战45讲 05讲深入浅出索引(下)极客时间 读书笔记
极客时间 Mysql实战45讲 04讲深入浅出索引(下)极客时间 笔记体会: 回表:回到主键索引树搜索的过程,称为回表覆盖索引:某索引已经覆盖了查询需求,称为覆盖索引,例如:select ID fro ...
- C++线程安全退出
HANDLE m_EvtThreadExit[MaxVisionNum]; //定义 方法一 ;i<MaxVisionNum;i++) m_EvtThreadExit[index] = Crea ...
- MetaSploit攻击实例讲解------社会工程学set攻击(kali linux 2016.2(rolling))(详细)
不多说,直接上干货! 首先,如果你是用的BT5,则set的配置文件是在 /pentest/exploits/set/set_config下. APACHE_SERVER=ONSELF_SIGNED_A ...
- Spark 运行机制及原理分析
- 深入C#类的方法
构造函数 example1: static void Main(string [] args) { SE engineer=new SE(); engineer.Age=; enginner.Name ...
- 【转载】tom的RUNSTATS测试工具
-- 创建 runstats 包.其中包括 3 个简单 API 调用: create or replace package runstats_pkg as procedure rs_start; pr ...
- 「JavaSE 重新出发」02. 数据类型与运算符
「TOC」 Java 程序基本要求 Java 数据类型 基本数据类型 复合数据类型 运算符 逻辑运算符 位运算符 运算符优先级 Java 程序基本要求 public class : 一个 Java 文 ...