ajax案列练习

学习主题:AJAX深入练习
学习目标:
1 熟练使用ajax写功能

1ajax之三级联动案例分析

1.1简答题
根据视频中的讲解,完成以下内容
1.1.1视频中的三级联动案例的功能需求是什么
1、页面中有三个下拉框选项,分别为省下拉框,市下拉框,区/县下拉框
2、选择省,则市下拉框中出现对应的该省下的市信息,选择市,则区/ 县下拉框中
3、出现对应的该市下面的区/县信息

1.1.2视频中的需求分析的内容是
1、创建页面:页面中有三个下拉框,分别为省、市、区/县
2、页面加载成功发起ajax请求,请求省的信息,并将响应结果填充到 省下拉框中
3、选择省触发一个新的js函数 的执行,该函数中发起新的ajax请求
请求该省下的市信息,并将响应数据填充到市下拉框
4、选择市信息触发一个新的js函数的执行,该函数中发起新的ajax 请求, 请求该市下的区/县信息,并将数据填充到区/县下拉框中

02-ajax之三级联动数据库设计和实现

2.1 编程题
2.1.1 根据视频讲解完成三级联动数据库表设计。
创建表(area):存储了省、市、区/县信息
设计表实现一:只存储了数据,但是数据之间的层级关系没有存储。
地区id:areaid
地区名:areaname
设计表实现二:
地区id:areaid
地区名:areaname
地区上级id:parentid

2.1.2 根据视频讲解完成三级联动案例的SQL语句设计。
查询所有的省信息:
select * from area where parentid=0;
查询选择的省的市信息(假如:选择的山东省的areaid为110000,)
select * from area where parentid=110000;
查询选择的市的区/县信息(假如:选择的山东省的济南市areaid为110001)
select * from area where parentid =110001;
代码中
select * from area where parentid=?;

2.1.3 根据视频讲解将area.sql文件导入到数据库中。

03 ajax之三级联动代码实现获取所有的省信息

3.1 上机练习
3.2.1 根据视频讲解完成前台jsp页面的创建。

 <body style="background-color: pink;">
  	<div style="margin: auto;width: 750px;margin-top: 200px;">
  		省: <select name="" id="pre" style="width: 200px;height: 30px;"></select>
   	 	市: <select name="" id="city" style="width: 200px;height: 30px;"></select>
   	 	区\县: <select name="" id="town" style="width: 200px;height: 30px;"></select>
  	</div>
  </body>

3.2.2 在select.jsp中声明ajax代码请求省信息

$.get("area",{parentid:0},function(data){
				alert(data);
			})

3.2.3 完成请求省信息的后台功能,并能alert出请求的省信息。

AreaServlet:
public class AreaServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置请求编码格式
		req.setCharacterEncoding("utf-8");
		//设置响应编码格式
		resp.setContentType("text/html;charset=utf-8");
		//获取请求信息
		String pid = req.getParameter("parentid");
		System.out.println(pid);
		//处理请求信息
		AreaService as = new AreaServiceImpl();
		List<Area> list = as.selAreaInfoService(pid);
		//响应处理结果
			//直接响应
		resp.getWriter().write(new Gson().toJson(list));
	}
}
AreaService:
public interface AreaService {

	List<Area> selAreaInfoService(String pid);

}
AreaServiceImpl:
public class AreaServiceImpl implements AreaService{
	@Override
	public List<Area> selAreaInfoService(String pid) {
		SqlSession session = MybatisUtil.getSession();
		AreaMapper mapper = session.getMapper(AreaMapper.class);
		List<Area> list = mapper.selById(pid);
		session.close();
		return list;
	}

}
AreaMapper.java:
public interface AreaMapper {
	List<Area> selById(String parentid);
}
AreaMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="an.sz.mapper.AreaMapper">
 	<select id="selById" parameterType="string" resultType="area">
 		select * from area where parentid=#{0}
 	</select>
 </mapper>

04ajax之三级联动实现省信息填充和市信息功能

4.1编程题

4.1.1 根据视频,将省信息填充到省下拉框中?

$(function(){
			$.get("area",{parentid:0},function(data){
				//将数据转为js格式
				eval("var areas="+data);
				//获取下拉框
				var sel=$("#pre");
				//清空原有内容
				sel.empty();
				//遍历
				for(var i=0;i<areas.length;i++){
					//填充数据到下拉框
					sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
				}
			});

4.1.2 根据视频讲解完成市信息下拉框功能?

//页面加载成功给省加onchange事件
			$("#pre").change(function(){
				//获取省areaid
				var areaid=$("#pre").val();
				//获取市信息
				$.get("area",{parentid:areaid},function(data){
					//将数据转换为js格式
					eval("var areas="+data);
					//获取下拉框
					var sel=$("#city");
					//清空原有内容
					sel.empty();
					//遍历
					for(var i=0;i<areas.length;i++){
						//填充数据
						sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
					}
				})
			});

05ajax之三级联动代码完整实现

5.1 简答题
5.1.1 根据视频讲解完成城镇信息下拉框功能?

//页面加载完给市一个onchange事件
			$("#city").change(function(){
				//获取市的areaid
				var areaid=$("#city").val();
				//获取区县信息
				$.get("area",{parentid:areaid},function(data){
					//将数据转为js格式
					eval("var areas="+data);
					//获取下拉框
					var sel=$("#town");
					//清空原有数据
					sel.empty();
					//遍历
					for(var i=0;i<areas.length;i++){
						//填充数据
						sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
					}		
				})
			})

5.1.2 根据视频讲解,目前实现的三级联动中为什么选择省信息后,市信息为改变但是城镇信息还是不变?如何解决?并在代码实现。

因为目前实现的还只是两级联动,当省信息发生改变会触动市的改变,但是市的onchange事件需要人为手动去触发。使用trigger触动指定事件。

//加载页面时发起请求
		$(function(){
			$.get("area",{parentid:0},function(data){
				//将数据转为js格式
				eval("var areas="+data);
				//获取下拉框
				var sel=$("#pre");
				//清空原有内容
				sel.empty();
				//遍历
				for(var i=0;i<areas.length;i++){
					//填充数据到下拉框
					sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
				}
				$("#pre").trigger("change");//触发指定事件
			});
			//页面加载成功给省加onchange事件
			$("#pre").change(function(){
				//获取省areaid
				var areaid=$("#pre").val();
				//获取市信息
				$.get("area",{parentid:areaid},function(data){
					//将数据转换为js格式
					eval("var areas="+data);
					//获取下拉框
					var sel=$("#city");
					//清空原有内容
					sel.empty();
					//遍历
					for(var i=0;i<areas.length;i++){
						//填充数据
						sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
					}
					$("#city").trigger("change");
					
				})
			});
			
			//页面加载完给市一个onchange事件
			$("#city").change(function(){
				//获取市的areaid
				var areaid=$("#city").val();
				//获取区县信息
				$.get("area",{parentid:areaid},function(data){
					//将数据转为js格式
					eval("var areas="+data);
					//获取下拉框
					var sel=$("#town");
					//清空原有数据
					sel.empty();
					//遍历
					for(var i=0;i<areas.length;i++){
						//填充数据
						sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
					}			
				})
			})
		})

5.1.3 根据视频讲解完成代码的封装

//加载页面时发起请求
		$(function(){
			//获取省
			getData(0,"pre");
			
			//页面加载成功给省加onchange事件
			$("#pre").change(function(){
				//获取省areaid
				var areaid=$("#pre").val();
				getData(areaid,"city");
			});
			
			//页面加载完给市一个onchange事件
			$("#city").change(function(){
				//获取市的areaid
				var areaid=$("#city").val();
				getData(areaid,"town");
					
				})
		
			
			//抽取公共部分
			function getData(areaid,sid){
					//获取市信息
					$.get("area",{parentid:areaid},function(data){
						//将数据转换为js格式
						eval("var areas="+data);
						//获取下拉框
						var sel=$("#"+sid);
						//清空原有内容
						sel.empty();
						//遍历
						for(var i=0;i<areas.length;i++){
							//填充数据
							sel.append("<option value='"+areas[i].areaid+"'>"+areas[i].areaname+"</option>");
						}
						$("#"+sid).trigger("change");			
					})	
			}
		})

06ajax之搜索框提示语功能需求和思路分析

6.1 简答题
6.1.1 视频中的功能需求是什么?

用户在搜索框中输入关键字,然后搜索框下出现下拉选项,提示关键字的提示语。
用户可以使用鼠标进行提示语的选择,也可以使用键盘的上下键来进行选择。

6.1.2 视频讲解的功能分析(思路)的内容是?
1、创建搜索界面(搜索框和提示语div和搜索按钮)
2、给搜索框添加onkeyup事件,键盘弹起时发送ajax请求
请求当前用户输入的信息对应的提示语数据
3、将提示语数据填充到搜索框下的div中

07ajax之搜索框提示语功能数据库设计和实现

7.1 简答题
7.1.1 根据视频讲解完成提示语功能的数据库设计?
数据库设计:
创建表:(data) 存储了常用的关键字数据
关键字编号:id
关键字数据:title
说明:remark
添加测试数据:要求前期测试数据为英文单词

7.1.2 根据视频讲解完成提示语功能的SQL语句设计。
SQL语句设计:查询以用户当前搜索框数据开头的关键字
select * from t_data where title like ‘a%’

7.1.3 根据视频讲解完成数据库的实现。

08-ajax之搜索框体提示语功能页面创建和键盘事件添加

8.1 编程题
8.1.1 根据视频完成提示语功能页面的创建。

<body>
    <div id="con" style="width: 500px;margin: auto;margin-top: 200px">
    	<div id="sdiv">
    		<input type="text" name="serach" value="" id="serach" style="width: 300px;height: 30px;"/>
    		<input type="button" value="搜索" style="width: 100px;height: 30px"/>
    	</div>
    	<div id="tdiv" style="width: 298px;height: 245px;border: 1px solid;border-top: none;"></div>
    </div>
  </body>

8.2.2完成键盘事件的添加。

<script type="text/javascript">
    	$(function(){
    		$("#sdiv").keyup(function(){
    			alert("弹起");
    		})
    	})
    </script>

09ajax之搜索框提示语功能后台逻辑实现

9.1 编程题
9.2.1 根据视频完成提示语功能后台代码的实现。

10ajax之搜索框提示语功能数据填充和键盘码判断

10.1编程题
10.1.1 根据视频,完成提示语数据填充到div中。

var sd = $("#search").val();
    	$.get("search",{sdata:sd},function(data){
        				//alert(data);
        				//将响应数据转成js对象
        				var dd = eval(data);
        				//获取div对象
        				var div = $("#tdiv");
        				//清空之前的内容
        				div.empty();
        				for(var i=0;i<dd.length;i++){
        					div.append("<div>"+dd[i].title+"</div>");
        				}

10.2.2 根据视频判断键盘码完善ajax代码。

$("#sdiv").keyup(function(){
    			//alert("弹起");
    			//添加event事件对象
    			var ev = window.event;
    			
    			var code = ev.keyCode;
    			//alert(code);
    			//在指定的键的情况下发送ajax请求
    			if(code>=65&&code<=90 || code==8){
    				//获取搜索框的数据
        			var sd = $("#search").val();
    				if(sd==""){
    					return;
    				}
        			$.get("search",{sdata:sd},function(data){
        				//alert(data);
        				//将响应数据转成js对象
        				var dd = eval(data);
        				//获取div对象
        				var div = $("#tdiv");
        				//清空之前的内容
        				div.empty();
        				for(var i=0;i<dd.length;i++){
        					div.append("<div>"+dd[i].title+"</div>");
        				}
    		})

11ajax之搜索框提示语功能鼠标选择提示语

11.2 编程题
11.2.1 完成鼠标选择功能。

//给所有tdiv下的div添加鼠标悬停事件
        				$("#tdiv div").mouseover(function(){
        					//删除其他div的背景样式
        					$("#tdiv div").css("background-color","");
        					//当鼠标悬停在一个div上时改变当前div的背景颜色
        					$(this).css("background-color","gray");
        				})
        				//给所有tdiv下的div添加鼠标点击事件
        				$("#tdiv div").click(function(){
        					//获取搜索框对象并赋值
        					$("#search").val($(this).html());
        					//获取tdiv对象并隐藏
        					$("#tdiv").css("display","none");
        				})

12ajax之搜索框提示语功能键盘下键功能实现

12.1 编程题
12.1.1 完成视频下键选择功能。

if(code==40){
    				if($("#tdiv div").length>0){
    					count = count<$("#tdiv div").length-1?++count:0;
    					//清空背景颜色
    					$("#tdiv div").css("background-color","");
        				$("#tdiv div:eq("+count+")").css("background-color","gray");
        				//把div的值赋值到搜索框中
        				$("#search").val($("#tdiv div:eq("+count+")").html());
    				}
    				
    			}

13ajax之搜索框提示语功能上键功能和键盘鼠标联动和延迟发送请求

13.2 编程题
13.2.1 完成键盘上键选择功能。

if(code==38){
    				if($("#tdiv div").length>0){
    					count = count>0?--count:$("#tdiv div").length-1;
    					//清空背景颜色
    					$("#tdiv div").css("background-color","");
        				$("#tdiv div:eq("+count+")").css("background-color","gray");
        				$("#search").val($("#tdiv div:eq("+count+")").html());
    				}
    			}

13.2.2 完成键盘鼠标联动选择功能
在鼠标悬停事件中添加如下代码:
//鼠标和键盘的联动,将当前鼠标选择的div的角标赋值给计数器
count = $(this).index();

13.2.3 完成延迟发送请求功能

//清除之前的将要发的请求
	 				window.clearTimeout(id);
	 				//延迟发送请求
	 				id=window.setTimeout(function(){
	 					//发起ajax请求,请求当前用户搜索框数据的提示语信息。
			 			$.get("search",{sdata:sd},function(data){
			 				//使用eval方法将数据转换为对象
			 					eval("var sd="+data);
			 				//获取提示语div元素对象
			 					var dataDiv=$("#dataDiv");
			 				//清空原有内容
			 					dataDiv.empty();
			 				//显示隐藏的div
			 				if(sd.length>0){
			 					dataDiv.css("display","");
			 				}
			 				//将提示语数据填充到div中
			 					for(var i=0;i<sd.length;i++){
			 						dataDiv.append("<div style='padding:5px;'>"+sd[i].title+"</div>");
			 					}
			 				//给提示语添加鼠标选择效果
			 			 		$("#dataDiv div").mouseover(function(){
			 			 			//清空所有提示语的div的背景颜色
			 			 			$("#dataDiv div").css("background-color","");
			 			 			//将当前选择的div北京颜色变成灰色
			 			 			$(this).css("background-color","gray");
			 			 			//鼠标和键盘的联动,将当前鼠标选择的div的角标赋值给计数器
			 			 			count=$(this).index();
			 			 		})
			 			 	//给提示语div添加单击事件,用来选择提示语
			 			 		$("#dataDiv div").click(function(){
			 			 			//将当前选择的div中的提示语数据改变到搜索框中
			 			 				$("#search").val($(this).html());
			 			 			//隐藏当前填充所有提示语的div
			 			 				$("#dataDiv").css("display","none");	
			 			 		})	
			 			})
	 				}, 1000)
	 			}

14ajax之搜索框提示语功能大结局

14.2 编程题
14.2.1 根据视频完整实现提示语功能
15ajax之整合项目删除功能修改
15.1 编程题
15.2.1 根据视频使用ajax完成jsp和Servlet整合项目的删除功能。

<script type="text/javascript">
function del(uid){
	if(confirm("确定删除吗?")){
		 //发起ajax请求
		 $.get("data",{method:"delUser",uid:uid},function(data){
			 if(eval(data)){
				 alert("用户删除成功");
				 window.location.href="data?method=selAll";
			 }
		 })
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值