Ajax的常用技巧(1)----实现表单数据验证
为了保证信息的有效性和正确性,防止数据的错误和无效,在使用数据之前,通常要对浏览者在客户端输入的数据进行验证。但是这种处理方式并不能解决所有的验证问题,例如,在进行用户信息注册时,客户端只能实现类似是否填写了必要的信息,长度是否满足需求等基本的有效性检查,但是对于所填写的用户信息是否已经被占用等诸如此类的检查,在客户端脚本中是没有办法实现的。
同时,如果按照传统的方式将此类验证逻辑放在服务端实现,也会因为面临需要整个页面刷新的问题,而使得问题不能以直观的方式迅速显示在用户面前。借助Ajax技术,在异步交互的前提下,调用服务器端事先编写好的验证逻辑,可以很好的解决此问题。
数据的验证有两方面的含义,一方面是数据格式正确性的验证;一种是数据数值的验证。通常数据格式的验证都是在客户端进行,而数据数值的验证在服务器端进行。在使用Ajax技术进行数据验证时,应该确保数据格式验证要优先于数据数字验证。
现在创建一个实例,以显示Ajax技术的数据验证功能。该实例验证分为两部分,一部分是数据格式验证;一部分是数据数值验证。为了更加有效地反应表单数据验证,这里采用了数据库表中的数据验证。
注意:为了减少程序操作的复杂度,突出Ajax表单中的数据验证功能。这里采用了Access数据库。
1,服务器端代码
该实例服务器端代码主要具有两个功能,首先查询客户端传递的名称在数据库中是否存在,如果存在,则不允许数据插入到数据库中;如果查询数据不存在,则向数据库表中插入数据。该实例需要使用数据库操作,故单独创建一个jsp文件链接数据。打开记事本,输入下列代码:
[plain]
<%@ 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,客户端代码
客户端代码主要用来校验数据格式和异步传输数据。打开记事本,输入下列代码:
[plain]
<%@ 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>&n
补充:Web开发 , 其他 ,