Ajax不刷新整个页面,只刷新局部。
下面是判断注册用户是否已经存在的列子:
1)JSP页面代码:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gbk">
<title>welcome ,注册本系统</title>
<link rel="stylesheet" type="text/css" href="style/style.css">
<script type="text/javascript">
var xhr = null;
function checkUname() {
var username = document.myform.uname.value;
if (username == "" || username == null) {
document.getElementById("msgDiv").innerHTML = "<font color='red'>请输入用户名</font>";
}
//ajax的核心对象
//var xhr=new XMLHttpRequest();//只对非ie浏览器生效
if (window.ActiveXObject) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} else {
xhr = new XMLHttpRequest();
}
//var url = "http://localhost:8080/Myself_Ajax/RegServlet?uname="+ username;
var url = "RegServlet?uname=" + username;//url简写
url = encodeURI(encodeURI(url));//两次转码
//当核心对象的状态发生改变,它的处理函数
xhr.onreadystatechange = haolejiaowo;
xhr.open("get", url, true);
xhr.send(null);
}
//才是核心处理函数
function haolejiaowo() {
if (xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;//得到远程服务器返回的结果
if (result.indexOf("true") != -1) {
document.getElementById("msgDiv").innerHTML = "<font color='red'>用户名已存在</font>";
;
} else {
document.getElementById("msgDiv").innerHTML = "可以注册";
}
}
}
</script>
</head>
<body>
<div align="center">
<%-- 登录 --%>
<div class="login" align="center">
<br />
<h2>
短信系统注册 Ajax
</h2>
<form action="UserServlet" method="post" name="myform">
<input type="hidden" name="cmd" value="reg">
用户名
<input type="text" name="uname" class="input" onblur="checkUname()" />
<div id="msgDiv" style="display: inline">
</div>
<br />
密 码
<input type="password" name="upass" class="input" />
<br />
重复密码
<input type="password" name="upassrep" class="input" />
<br />
<input type="submit" value=" 注册 " class="btn" />
</form>
</div>
</div>
</body>
</html>
2)编写服务器段代码:(Servlet处理的代码)
package com.neusoft.sms.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegServlet extends HttpServlet {
public boolean isExist(String username) {
// 模拟后台数据库有三个用户
String[] names = { "jack", "rose", "marry", "谭健升" };
for (String s : names) {
if (username.equalsIgnoreCase(s)) {
return true;
}
}
return false;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
String username = request.getParameter("uname");
username = URLDecoder.decode(username, "UTF-8");// 一次解码
boolean flag = isExist(username);
out.println(flag);
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
3)页面显示的结果:
注意:
1.记得要测试一下url地址是否正确
2.当前台数据与后台数据一样,但前台显示能注册,这有可能是传值的时候出现乱码,所有要进行一次解码和两次转码。
1)在js文件中使用encodeURI()方法进行两次转码
var url = encodeURI(encodeURI(url));
2)在后台中对传递的参数进行URLDecoder解码,要导入import java.net.URLDecoder;
username = URLDecoder.decode(username, "UTF-8");