当前位置:编程学习 > 网站相关 >>

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开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,