AJAX应用


1. 当用户在10秒之内发送了3次请求时,
   禁用用户名的输入框,
   3秒钟之后才可以打开这个输入框继续使用

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>请注册</h1>
	
	<form action="regist" method="post">
		用户名: <input id="uname" type="text" name="uname" onblur="check()"/><span id="span1"></span> <br /><br />
		密码: <input type="password" name="upwd" /> <br /><br />
		
		<input type="submit"/> 
	</form>
	
	<script type="text/javascript" src="/Servlet02/js/jquery-1.7.2.js"></script>
	<script type="text/javascript">
		var count = 0;	// 请求的次数, 如果到3就要禁用输入框
		function check(){
			var uname = document.getElementById("uname").value;
			
			// 1. 创建异步传输对象
			var xmlhttp = new XMLHttpRequest();
			
			// 2. 设置好响应回来的时候要触发的函数
			xmlhttp.onreadystatechange = function(){
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
					// 4. 接收服务器的响应
					var res = xmlhttp.responseText;
					var json = eval('(' + res + ')');
					// 根据结果显示对应的内容
					var span = document.getElementById("span1");
					span.innerHTML = json.content;
					
					if(json.exists){
						span.style.color = "red";
					}else{
						span.style.color = "green";
					}
					
				}
			}
			
			// 3. 发送Ajax请求
			xmlhttp.open("GET","/Servlet02/check?uname=" + uname,true);
			xmlhttp.send();
			
			
			// 计数
			count ++;
			// 10秒后这个计数就过期了
			setTimeout("countTimeout()", 10*1000);
			// 达到3次就禁用
			if(count >= 3){
				$("#uname").prop("disabled", true);
				// 解锁时间设置为3
				time = 4;
				$("#span1").text("3秒后解锁!").css("color", "black");
				// 开始解锁
				unlock();
			}
		}
		
		// count过期
		// 10秒之后, 如果count是大于0的, 就减一, 如果是0, 就不变
		function countTimeout(){
			count = count > 0 ? count - 1 : 0;	
		}
		
		
		var time = 4;
		// 解锁的方法
		function unlock(){
			time --;
			$("#span1").text(time + "秒后解锁!").css("color", "black");
			if(time > 0){
				// 递归调用
				setTimeout('unlock()', 1000);
			}else{
				// 先把次数清0
				count = 0;
				// 解锁
				$("#uname").prop("disabled", false);
				$("#span1").text("");
			}
			
		}
	
	</script>
</body>
</html>

 

 

 

 

 

 

2. 搜索框自动补全

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<input type="text" style="width: 200px" name="search" />
	<input type="button" value="搜索"/><br />
	
	<select multiple="multiple" style="width: 200px; display: none">
	</select>
	
	<script type="text/javascript" src="/Ajax/js/jquery-1.7.2.js"></script>
	<script type="text/javascript">
		
		$(function(){
			
			// 当内容改变时
			$("select").change(function(){
				$("input[name='search']").val($(this).val());		
			});
			
			$("input[name='search']").keyup(function(){
				
				if($(this).val().length == 0)
					return;
				
				$.post("/Ajax/search", {
					keyname : $(this).val(),
				}, function(data) {
					//["康师傅冰红茶","康师傅冰绿茶"]
					// 判断集合是否有长度
					$("select").html("");
					if(data.length > 0){
						$("select").css("display", "inline");
						// 填充里面的内容
						for(var i = 0 ; i < data.length; i ++){
							var opt = new Option(data[i], data[i]);
							$("select")[0].add(opt);
						}
						
					}else{
						$("select").css("display", "none");
					}
					
					
				}, "json");
				
			});
			
			
			
		})
	
	</script>
</body>
</html>

searchservlet

package com.bwf.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bwf.jdbc.ConnectionFactory;
import com.google.gson.Gson;

@WebServlet("/search")
public class SearchAjaxServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		// 拿出客户端上传的参数
		String keyname = request.getParameter("keyname");
		System.out.println(keyname);
		
		// 带着参数查询数据库
		List<String> pnameList = new ArrayList<>();
		Connection conn = ConnectionFactory.getConnection();
		try {
			PreparedStatement ps = conn.prepareStatement("SELECT * FROM product WHERE prodName LIKE ?");
			ps.setString(1, "%" + keyname + "%");
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				pnameList.add(rs.getString("prodName"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(conn != null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		// 包装成json
		String json = new Gson().toJson(pnameList);
		System.out.println(json);
		// 返回客户端
		response.getWriter().write(json);
	}

}

 

 

 

3. 地址三级联动

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	收货地址:
	<select id="select1">
		<option value="-1">---请选择国家---</option>
	</select>
	<select id="select2">
		<option value="-1">---请选择省份/洲---</option>
	</select>
	<select id="select3">
		<option value="-1">---请选择地区---</option>
	</select>
	
	<script type="text/javascript" src="/Ajax/js/jquery-1.7.2.js"></script>
	<script type="text/javascript">
	
		$(function(){
			
			// 发送一个请求, 查询所有的国家, 填充到select1
			$.post("/Ajax/area", {
				// 1表示先查询所有国家
				pid : 1,
			}, function(data) {
				// [{"areaId":2,"areaName":"中国"},{"areaId":3,"areaName":"美国"}]
				
				for(var i = 0; i < data.length; i ++){
					var opt = new Option(data[i].areaName, data[i].areaId);
					$("#select1")[0].add(opt);
				}
				
			}, "json");
			
			
			// 给select1添加内容改变事件, 修改s2的内容
			$("#select1").change(function(){
				// 发送一个请求, 查询所有的国家, 填充到select1
				$.post("/Ajax/area", {
					// 1表示先查询所有国家
					pid : $(this).val(),
				}, function(data) {
					// [{"areaId":2,"areaName":"中国"},{"areaId":3,"areaName":"美国"}]
					// 返回了结果, 先清空
					$("#select2").html("<option value='-1'>---请选择省份/洲---</option>");
					$("#select3").html("<option value='-1'>---请选择地区---</option>");
					for(var i = 0; i < data.length; i ++){
						var opt = new Option(data[i].areaName, data[i].areaId);
						$("#select2")[0].add(opt);
					}
					
				}, "json");
				
				
				
				
				
			});
			
			// 给select2添加内容改变事件, 修改s3的内容
			$("#select2").change(function(){
					// 发送一个请求, 查询所有的国家, 填充到select1
				$.post("/Ajax/area", {
					// 1表示先查询所有国家
					pid : $(this).val(),
				}, function(data) {
					// [{"areaId":2,"areaName":"中国"},{"areaId":3,"areaName":"美国"}]
					// 返回了结果, 先清空
					$("#select3").html("<option value='-1'>---请选择地区---</option>");
						
					for(var i = 0; i < data.length; i ++){
						var opt = new Option(data[i].areaName, data[i].areaId);
						$("#select3")[0].add(opt);
					}
						
				}, "json");
			});
		})
	
	</script>
</body>
</html>

 

 

areaservlet

package com.bwf.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bwf.jdbc.ConnectionFactory;
import com.google.gson.Gson;

@WebServlet("/area")
public class AreaAjaxServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		
		// 拿到客户端上传的pid
		int pid = Integer.parseInt(request.getParameter("pid"));
		System.out.println(pid);
		
		// 带着pid查询数据库
		Connection conn = ConnectionFactory.getConnection();
		List<Map<String, Object>> dataList = new ArrayList<>();
		
		try {
			PreparedStatement ps = conn.prepareStatement("SELECT * FROM area WHERE pid = ?");
			ps.setInt(1, pid);
			ResultSet rs = ps.executeQuery();
			while(rs.next()){
				// 封装对象
				Map<String, Object> map = new HashMap<>();
				map.put("areaId", rs.getInt("areaId"));
				map.put("areaName", rs.getString("areaName"));
				dataList.add(map);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		
		// 转成json
		String json = new Gson().toJson(dataList);
		System.out.println(json);
		
		// 返回客户端
		response.getWriter().write(json);
		
	}

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值