Ajax请求json

将JSON数据显示到页面

发送异步请求,取得json数据,服务器端将json数据返回给js的回调函数之后,可以在回调函数中输出,但是最终目的不是仅仅将数据输出,而是要将这些json数据显示到页面,此时就需要借助js对dom的操作功能将数据生成到HTML页面了

查询一个雇员信息

emp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="login.js"></script>
</head>
<body>
	<a href="javascript:void(0)">取得一个雇员的信息</a>
	<a href="javascript:void(0)">取得所有雇员的信息</a>
	<br><br/>
	<table border="1">
		<tr>
			<td>编号</td><td>姓名</td><td>职位</td><td>薪资</td><td>领导编号</td>
			<td>入职日期</td><td>佣金</td><td>部门编号</td>
		</tr>
	</table>
</body>
</html>

login.js

//为超链接绑定事件,点击之后会发送请求
$(function(){
	$("a:first").click(function(){
	$("tr:gt(0)").remove();
	//发送请求
	$.ajax({
		type:"get",
		url:"emp/get",
		data:"id=7788",
		dataType:"json", //表示可以跨域访问json数据
		async:false, //锁定浏览器,只有请求处理完毕之后(回调函数调用完成之后),才能执行后面的代码
		success:function(data){
			//将数据添加到表格中
			$("table").append("<tr>" +
					"<td>" + data.empno + "</td>" +
					"<td>" + data.ename + "</td>" +
					"<td>" + data.job + "</td>" +
					"<td>" + data.sal + "</td>" +
					"<td>" + data.hiredate + "</td>" +
					"<td>" + data.mgr + "</td>" +
					"<td>" + data.comm + "</td>" +
					"<td>" + data.deptno + "</td>" +
					"<td><button>删除</button></td>" +
					"</tr>");
		}
	})
})
})
public void getEmpById(HttpServletRequest req, HttpServletResponse resp) {
		//取得业务层实现类对象
		IEmpService service = new EmpServiceImpl();
		//取得要查询的雇员的编号
		Integer empno = Integer.parseInt(req.getParameter("id"));
		//将查询到的数据对象转换成JSON数据
		String json = JSON.toJSONString(service.findEmpById(empno));
		//将JSON数据直接输出给客户端(而不是将数据保存到request内置对象,跳转到JSP,使用EL表达式输出)
		PrintWriter out = null;
		try {
			out = resp.getWriter();
			out.print(json);
		} catch (Exception e) {
			e.printStackTrace();
		}
		out.close();
	}

Ajax请求json

取得List集合数据

修改业务层代码

@Override
	public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			/*将list集合中的雇员按照职位进行分组,以键值对的形式保存到map集合中,
				key是职位名称,value是该职位下所有雇员的List集合 */
			List<Emp> list = this.empDAO.selectSplitAll(kw, cp, ls);
			//调用分组的方法
			//this.groupByJob(list, map);
			map.put("list", list);
			//统计数据量
			//map.put("count", this.empDAO.selectCount(kw));
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			C3P0Util.close(conn);
		}
		return map;
	}

定义Servlet中的代码

public void getEmpList(HttpServletRequest req, HttpServletResponse resp) {
		IEmpService service = new EmpServiceImpl();
		PrintWriter out = null;
		try {
			out=resp.getWriter();
			//将list集合转换成JSON输出
			out.println(JSON.toJSONString(service.findAllSplit("", 1, 100).get("list")));
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

定义js中的代码

$(function(){
	$("a:last").click(function(){
	$("tr:gt(0)").remove();
	//发送请求
	$.ajax({
		type:"get",
		url:"emp/emp",
		dataType:"json", //表示可以跨域访问json数据
		async:false, //锁定浏览器,只有请求处理完毕之后(回调函数调用完成之后),才能执行后面的代码
		success:function(data){
			$.each(data,function(index){//data是要迭代的集合,index是索引
				//将数据添加到表格中
				$("table").append("<tr>" +
						"<td>" + data[index].empno + "</td>" +
						"<td>" + data[index].ename + "</td>" +
						"<td>" + data[index].job + "</td>" +
						"<td>" + data[index].sal + "</td>" +
						"<td>" + data[index].hiredate + "</td>" +
						"<td>" + data[index].mgr + "</td>" +
						"<td>" + data[index].comm + "</td>" +
						"<td>" + data[index].deptno + "</td>" +
						"<td><button>删除</button></td>" +
						"</tr>");
			})			
		}
	})
})
})

使用for循环遍历

for(var index=0;index<data.length;index++){//data是要迭代的集合,index是索引
				//将数据添加到表格中
				$("table").append("<tr>" +
						"<td>" + data[index].empno + "</td>" +
						"<td>" + data[index].ename + "</td>" +
						"<td>" + data[index].job + "</td>" +
						"<td>" + data[index].sal + "</td>" +
						"<td>" + data[index].hiredate + "</td>" +
						"<td>" + data[index].mgr + "</td>" +
						"<td>" + data[index].comm + "</td>" +
						"<td>" + data[index].deptno + "</td>" +
						"<td><button>删除</button></td>" +
						"</tr>");
			}			

Ajax请求json

异步请求Map集合数据

修改业务层代码:

public Map<String, Object> findAllSplit(String kw, Integer cp, Integer ls) {
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			/*将list集合中的雇员按照职位进行分组,以键值对的形式保存到map集合中,
				key是职位名称,value是该职位下所有雇员的List集合 */
			List<Emp> list = this.empDAO.selectSplitAll(kw, cp, ls);
			//调用分组的方法
			this.groupByJob(list, map);
			//map.put("list", list);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			C3P0Util.close(conn);
		}
		return map;
	}

定义servlet中的代码:

public void getEmpList(HttpServletRequest req, HttpServletResponse resp) {
		IEmpService service = new EmpServiceImpl();
		PrintWriter out = null;
		try {
			out=resp.getWriter();
			//将list集合转换成JSON输出
			out.println(JSON.toJSONString(service.findAllSplit("", 1, 100)));
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

emp.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<base href="/ServletProject/">
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/login.js"></script>
</head>
<body>
	<a href="javascript:void(0)">取得一个雇员的信息</a>
	<a href="javascript:void(0)">取得所有雇员的信息</a>
	<div></div>
</body>
</html>

login.js

$(function(){
	$("a:last").click(function(){
	$("tr:gt(0)").remove();
	//发送请求
	$.ajax({
		type:"post",
		url:"emp/emp",
		dataType:"json", //接收为JSON对象
		//async:false, //锁定浏览器,只有请求处理完毕之后(回调函数调用完成之后),才能执行后面的代码
		success:function(data){
			alert(data);
			//删除之前的数据再显示新的数据
			$("table").remove();
			$("h1").remove();
			//迭代Map集合,data是要迭代的map集合
			//key:每次迭代的键值对的key值就是职位名称
			//value:每次迭代到的键值对的value值,就是当前职位下的所有雇员的集合
			$.each(data,function(key,value){
			 
				$("div").append(
					"<table id='"+key+"'border=1>"+
						"<tr>"+
							"<th>编号</th><th>姓名</th><th>职位</th><th>薪资</th>" +
							"<th>入职日期</th><th>领导编号</th><th>佣金</th>" +
							"<th>部门编号</th><th>操作</th>"+
						"</tr>"+
					"</table>"
				);
				//迭代value,value表示当前的职位下的所有的雇员的集合
				//index,集合的索引
				$.each(value,function(index){
				var date = new Date(value[index].hiredate);
				var strDate = date.getFullYear()+"-"+date.getMonth()+"-"+date.getDate();
				if(value[index].comm==null){
					value[index].comm="我没有佣金!";
				}
				if(value[index].mgr==null){
					value[index].mgr="我是老板!";
				}
				$("#"+key).append("<tr>" +
						"<td>" + value[index].empno + "</td>" +
						"<td>" + value[index].ename + "</td>" +
						"<td>" + value[index].job + "</td>" +
						"<td>" + value[index].sal + "</td>" +
						"<td>" + strDate + "</td>" +
						"<td>" + value[index].mgr + "</td>" +
						"<td>" + value[index].comm + "</td>" +
						"<td>" + value[index].deptno + "</td>" +
						"<td><button>删除</button></td>" +
						"</tr>");
			})	
			})
		}
	})
})
})