`

Ajax的常用技巧(1)----实现表单数据验证

    博客分类:
  • Ajax
阅读更多

 为了保证信息的有效性和正确性,防止数据的错误和无效,在使用数据之前,通常要对浏览者在客户端输入的数据进行验证。但是这种处理方式并不能解决所有的验证问题,例如,在进行用户信息注册时,客户端只能实现类似是否填写了必要的信息,长度是否满足需求等基本的有效性检查,但是对于所填写的用户信息是否已经被占用等诸如此类的检查,在客户端脚本中是没有办法实现的。
同时,如果按照传统的方式将此类验证逻辑放在服务端实现,也会因为面临需要整个页面刷新的问题,而使得问题不能以直观的方式迅速显示在用户面前。借助Ajax技术,在异步交互的前提下,调用服务器端事先编写好的验证逻辑,可以很好的解决此问题。
数据的验证有两方面的含义,一方面是数据格式正确性的验证;一种是数据数值的验证。通常数据格式的验证都是在客户端进行,而数据数值的验证在服务器端进行。在使用Ajax技术进行数据验证时,应该确保数据格式验证要优先于数据数字验证。
现在创建一个实例,以显示Ajax技术的数据验证功能。该实例验证分为两部分,一部分是数据格式验证;一部分是数据数值验证。为了更加有效地反应表单数据验证,这里采用了数据库表中的数据验证。
注意:为了减少程序操作的复杂度,突出Ajax表单中的数据验证功能。这里采用了Access数据库。


1,服务器端代码


该实例服务器端代码主要具有两个功能,首先查询客户端传递的名称在数据库中是否存在,如果存在,则不允许数据插入到数据库中;如果查询数据不存在,则向数据库表中插入数据。该实例需要使用数据库操作,故单独创建一个jsp文件链接数据。打开记事本,输入下列代码:

<%@ page language="java" import="java.util.*,java.io.File,java.sql.*" pageEncoding="GBK"%>
<%@page contentType="text/html;charset=gb2312"%>
<%
 int status=0;
  String name=request.getParameter("name");
  name=new   String(name.getBytes("ISO-8859-1"), "UTF-8"); 
 //  out.print(name);
  String insertSql="insert into test (NAME) values ('"+name+"')";
  String sql="select * from test where NAME='"+name+"'";
 String   dbUr1="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E:"+File.separator+"dataAnalysis"+File.separator+"test.mdb";   
		  String   user="";   
		  String   password="";  
		  try{ 
		  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
		  Connection   c=DriverManager.getConnection(dbUr1,user,password);   
		  Statement s=c.createStatement();   
		  ResultSet   r=s.executeQuery(sql);   
		 if(r.next()){   
			 status=1;
		  }   
		  else{
			  s.executeUpdate(insertSql);
		  }
		    s.close();  
		  }catch(Exception e){
		  e.printStackTrace();
		  }
		 
  out.print(status); 
%>

可见创建了变量status,当存在时,status赋值为1,否则赋值为0,最后返回status。

2,客户端代码


客户端代码主要用来校验数据格式和异步传输数据。打开记事本,输入下列代码:

<%@ page language="java" import="java.util.*,com.njue.DBManager.*" pageEncoding="GBK"%>
<html>
<head>
<title>Simple AjaxExample </title>
<script type="text/javascript">
var xmlHttp;
   var name;
   var password;
   var password1;
function createXMLHttpRequest(){
   if(window.ActiveXObject) {
     xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");//创建XMLHttpRequet对象
   }
  else if (window.XMLHttpRequest) {
     xmlHttp=new XMLHttpRequest();//创建XMLHttpRequet对象
     }
 }
function startRequest() {
 createXMLHttpRequest();
   
 xmlHttp.onreadystatechange=handleStateChange;
 xmlHttp.open("POST", "Ran.jsp", true);
 var str="name="+name;
  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 xmlHttp.send(str);
 }
function handleStateChange() {
  if(xmlHttp.readyState==4) {
 if(xmlHttp.status==200) {
  if( xmlHttp.responseText==1)
  document.getElementById("nameInfo").innerHTML="<font color='red'>该昵称已存在</font>";
  else
  alert("恭喜你,注册成功!");
     }
  }
}
function check(){
if(name==""){
document.getElementById("nameInfo").innerHTML="<font color='red'>昵称不能为空!</font>";
return false;
}
else if(password==""){
document.getElementById("passwordInfo").innerHTML="<font color='red'>密码不能为空!</font>";
return false;
}
else if(password1==""){
document.getElementById("password1Info").innerHTML="<font color='red'>密码不能为空!</font>";
return false;
}
else if(password!=password1){
document.getElementById("password1Info").innerHTML="<font color='red'>两次输入的密码不一致!</font>";
return false;
}
else {
clear();
return true;
}
}
function exec(){
clear();
name=document.getElementById("userName").value;
password=document.getElementById("passWord").value;
password1=document.getElementById("passWord1").value;
if(check()==true){
startRequest();
}
}
function clear(){
document.getElementById("nameInfo").innerHTML="";
document.getElementById("passwordInfo").innerHTML="";
document.getElementById("password1Info").innerHTML="";
}
</script>
</head>
<body>
  <form action="#">
  <div align="center">
  <table border="1" >
<tr><td align="center" valign="center"> 昵称: <input id="userName"/><div id="nameInfo"></div><br/></td></tr>
 <tr><td>请输入密码: <input type="password" id="passWord"/><div id="passwordInfo"></div><br/></td></tr>
 <tr><td> 请再次输入密码: <input type="password" id="passWord1"/><div id="password1Info"></div><br/><tr/><td/>
 <tr><td><input type="button" value="注册"  onclick="exec(); "/></td></tr>
  </table>
  </div>
</form>
</body>
</html>


 

更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    jQuery权威指南-源代码

    其次详细讲解了jQuery的各种选择器、jQuery操作DOM的方法、jQuery中的事件与应用、jQuery中的动画和特效、Ajax在jQuery中的应用,以及各种常用的jQuery插件的使用方法和技巧,所有这些知识点都配有完整的示例(包括...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭...

    达内java培训目录

    Java语言基础 算法基础、常用数据结构、企业编程规范。 掌握常见的数据结构和实用算法;培养良好的企业级编程习惯。 Java面向对象 面向对象特性:封装、继承、多态等,面向对象程序设计,基础设计模式等。 掌握面向...

    php网络开发完全手册

    11.3 常用表单数据的验证方法 177 11.3.1 姓名验证 177 11.3.2 日期验证 177 11.3.3 E-mail地址验证 178 11.3.4 密码字段的验证 178 11.3.5 改进的用户信息输入程序 178 11.4 URL编码解码函数 181 11.4.1 编码字符串...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    高效前端:Web高效编程与优化实践_机械工业出版社; 第1版 (2018年1月1日) 完整版-未加密

    使用H5的history改善AJAX列表请求体验 109Effective前端12:使用图标替代雪碧图 118Effective前端13:理解和使用CSS3动画 128Effective前端14:实现前端裁剪压缩图片 136Effective前端15:实现跨浏览器的HTML5表单...

    超实用的jQuery代码段

    超实用的jQuery代码段精选近350个jQuery代码段,涵盖页面开发中绝大多数要点、技巧与方法,堪称史上最实用的jQuery代码参考书,可以视为网页设计与网站建设人员的好帮手。《超实用的jQuery代码段》的代码跨平台、跨...

    精通JS脚本之ExtJS框架.part1.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    JavaScript详解(第2版)

    第1章 JavaScript简介 1 1.1 JavaScript是什么 1 1.2 JavaScript不是什么 2 1.3 JavaScript的用处 3 1.4 JavaScript及其在Web页面中的位置 3 1.5 Ajax是什么 5 1.6 JavaScript是什么样子的 6 1.7 ...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    精通JS脚本之ExtJS框架.part2.rar

    分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    javascript完全学习手册1 源码

    4.2.4 表单验证 85 4.3 Anchor与Link对象 89 4.3.1 Anchor对象 89 4.3.2 Link对象 90 4.4 Image对象 92 4.4.1 图像翻转 92 4.4.2 图像载入 92 第5章 JavaScript其他常用 窗口对象 96 5.1 Window对象 96 5.1.1 常用...

    Ext Js权威指南(.zip.001

    7.4.5 数据验证及错误处理:ext.data.validations与ext.data.errors / 332 7.4.6 模型的关系:ext.data.association、ext.data.hasmanyassociation和ext.data.belongstoassociation / 334 7.4.7 管理数据模型:...

    《程序天下:JavaScript实例自学手册》光盘源码

    第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错...

    程序天下:JavaScript实例自学手册

    第1章 页面特效 1.1 HTML页面反向显示 1.2 页面自动最大化 1.3 页面自动刷新 1.4 页面的后退、刷新、前进 1.5保护网页源代码 1.6 保护自己的网页不被放入框架 1.7 保护自己的网页不被放入框架 1.8 打印页面的出错...

Global site tag (gtag.js) - Google Analytics