由于做注册页面需要在当前页面查询到数据库中是否已经存在该用户,所以就需要使用到ajax技术。以jsp为例
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajax检测用户名</title>
<script >
var XHR; //定义一个全局对象
function createXHR(){ //首先我们得创建一个XMLHttpRequest对象
if(window.ActiveXObject){//IE的低版本系类
XHR=new ActiveXObject('Microsoft.XMLHTTP');//之前IE垄断了整个浏览器市场,没遵循W3C标准,所以就有了这句代码。。。但IE6之后开始有所改观
}else if(window.XMLHttpRequest){//非IE系列的浏览器,但包括IE7 IE8
XHR=new XMLHttpRequest();
}
}
function checkname(){
var username=document.myform.user.value;
createXHR();
XHR.open("GET","checkname.jsp?id="+username,true);//true:表示异步传输,而不等send()方法返回结果,这正是ajax的核心思想
XHR.onreadystatechange=byhongfei;//当状态改变时,调用byhongfei这个方法,方法的内容我们另外定义
XHR.send(null);
}
function byhongfei(){
if(XHR.readyState == 4){//
if(XHR.status == 200){
var textHTML=XHR.responseText;
textHTML=textHTML.replace(/(\n)+|(\r\n)+|(\s)+/g,"");
alert(textHTML);
if(textHTML=="ok"){
document.getElementById('checkbox').innerHTML="a"+textHTML;
}else if(textHTML=="no"){
document.getElementById('checkbox').innerHTML="bbik"+textHTML;
}
}
}
}
</script>
</head>
<body>
<form name="myform">
用户名:<input type="text" name="user" οnblur="checkname();">
<span id="checkbox">1</span>
</form>
</body>
</html>
checkname.jsp(查询是否存在该用户)
<%@ page language="java" import="java.util.*" import="java.sql.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
request.setCharacterEncoding("utf-8");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String strConn = "jdbc:sqlserver://localhost:1433; DatabaseName=cs";
String user = "root";
String pa = "123456";
Connection conn =DriverManager.getConnection(strConn,user,pa);
Statement stat = conn.createStatement();
String name = request.getParameter("id");
String sql1="select * from users where name='"+name+"'";
ResultSet rs=stat.executeQuery(sql1);
if(rs.next()){
out.clear();
out.print("no");
}else{
out.clear();
out.print("ok");
}
%>
以上都是源码
开始的时候我用responseText获取checkname.jsp中的out.print的文字 总会出错 明明在index.jsp中document.getElementById('checkbox').innerHTML=textHTML 得到的是checkname.jsp中的out.print的文字 但用if(textHTML=="ok")这总是不执行 我用alert(textHTML);输出才发现会将checkname.jsp中的html代码也输出来,从而找到问题的关键。就是要把checkname.jsp中的html代码给删除只留下java代码 也就是我上面的checkname.jsp代码 而后其中还会有换行空格等因素 就是用字符替换就行了 也就是textHTML=textHTML.replace(/(\n)+|(\r\n)+|(\s)+/g,""); 将其替换成“” 到此你将会发现已经大功告成。