Ajax小练习

本文详细介绍了如何使用Ajax技术在用户注册过程中实时验证用户名的唯一性,避免了页面刷新,提供了更好的用户体验。通过JavaScript的异步请求,实现了在用户输入用户名时立即检查数据库中是否存在相同用户名的功能,确保了注册过程的高效性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值