全国城市三级联动

前端代码

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<title>全国城市三级联动</title>
<style type="text/css">
.bb {
	height: 100px;
}

h1 {
	color: red;
}

.box {
	border: 1px solid rgb(71, 67, 67);
	height: 200px;
	width: 500px;
	margin: auto;
	text-align: center;
}
</style>
<script type="text/javascript">
	var sel1 = document.getElementsByClassName("province");
	var sel2 = document.getElementsByClassName("city");
	var sel3 = document.getElementsByClassName("town");
	
	//加载所有的省份
	function selectPro() {
		//创建xmlHttprequest对象
		var req = new XMLHttpRequest();
		req.open("get", "QueryServlet?dowhat=selectPro", true);
		req.send();
		//接受数据
		req.onreadystatechange = function() {
			var data = req.responseText;
			var obj = eval(data);
			//动态添加数据
			if (req.readyState == 4 && req.status == 200) {
				for (var i in obj) {
					var opt = document.createElement("option");
					opt.innerHTML = obj[i];
					sel1[0].appendChild(opt);
					opt = sel1[0].children[0];
				}
			}
		}
	}
	//立即执行
	selectPro();
	//加载所有的市
	function selectCity() {
		sel2[0].options.length = 1;
		sel3[0].options.length = 1;
		var opt = sel1[0].children;
		//创建xmlHttprequest对象
		var req = new XMLHttpRequest();
		for (i = 0; i < opt.length; i++) { //下拉框的长度就是它的选项数.
			if (opt[i].selected == true) {
				var pname = opt[i].text; //获取当前选择项的文本.
				console.log(pname);
				req.open("get", "QueryServlet?dowhat=selectCity&pname=" + pname, true);
				req.send();
				req.onreadystatechange = function() {
					var data = req.responseText;
					var obj = eval(data);
					//动态添加数据
					if (req.readyState == 4 && req.status == 200) {
						for (var i in obj) {
							var opt = document.createElement("option");
							opt.innerHTML = obj[i];
							//console.log(i + "==" + obj[i]);
							sel2[0].appendChild(opt);
							opt = sel2[0].children[0];
						}
					}
				}
			}
		}
	}
	//加载所有的县
	function selectTown() {
		sel3[0].options.length = 1;
		var opt = sel2[0].children;
		//创建xmlHttprequest对象
		var req = new XMLHttpRequest();
		for (i = 0; i < opt.length; i++) { //下拉框的长度就是它的选项数.
			if (opt[i].selected == true) {
				var cname = opt[i].text; //获取当前选择项的文本.
				console.log(cname);
				req.open("get", "QueryServlet?dowhat=selectTown&cname=" + cname, true);
				req.send();
				req.onreadystatechange = function() {
					var data = req.responseText;
					var obj = eval(data);
					//动态添加数据
					if (req.readyState == 4 && req.status == 200) {
						for (var i in obj) {
							var opt = document.createElement("option");
							opt.innerHTML = obj[i];
							//console.log(i + "==" + obj[i]);
							sel3[0].appendChild(opt);
							opt = sel3[0].children[0];
						}
					}
				}
			}
		}
	}
</script>


</head>

<body>
	<div class="bb"></div>
	<div class="box">
		<h1>全国城市三级联动</h1>
		<select name="province" class="province" onchange="selectCity()">
			<option class="one">省份</option>
		</select> <select name="city" class="city" onchange="selectTown()">
			<option>地级市</option>
		</select> <select name="town" class="town">
			<option>市、县级市</option>
		</select>
	</div>

</body>

</html>

servlet代码

req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		QueryService service=new QueryService();
		//查询数据
		String dowhat=req.getParameter("dowhat");
		//System.out.println(dowhat);
		if ("selectPro".equals(dowhat)) {
			List<String>proList=service.getProName();
			String json=JSON.toJSONString(proList);
			resp.getWriter().print(json);
		}else if ("selectCity".equals(dowhat)) {
			String pname=req.getParameter("pname");
			List<String>cityList=service.getCityNameByProCode(pname);
			String json=JSON.toJSONString(cityList);
			resp.getWriter().print(json);
		}else if ("selectTown".equals(dowhat)) {
			String cname=req.getParameter("cname");
			List<String>townList=service.getTownNameByCityCode(cname);
			String json=JSON.toJSONString(townList);
			resp.getWriter().print(json);
		}

方法

//获取所有的省份
	public List<String> getProName() {
		List<String>proList=new ArrayList<String>();
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			con=MySQLContent.getConnect();
			String sql="select t_address_province.name from t_address_province";
			ps=con.prepareStatement(sql);
			rs=ps.executeQuery();
			while (rs.next()) {
				proList.add(rs.getString("name"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			MySQLContent.closeAll(rs, ps, con);
		}
		return proList;	
	}
	//获取所有的市的名字
	public List<String> getCityNameByProCode(String pname) {
		List<String>cityList=new ArrayList<String>();
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			con=MySQLContent.getConnect();
			String sql="SELECT t_address_city.name FROM t_address_city  WHERE t_address_city.provinceCode = (select code from t_address_province WHERE name=?)";
			ps=con.prepareStatement(sql);
			ps.setString(1, pname);
			rs=ps.executeQuery();
			while (rs.next()) {
				cityList.add(rs.getString("name"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			MySQLContent.closeAll(rs, ps, con);
		}
		return cityList;
	}
//获取所有的县的名字
	public List<String> getTownNameByCityCode(String cname) {
		List<String>townList=new ArrayList<String>();
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			con=MySQLContent.getConnect();
			String sql="SELECT t_address_town.`name` FROM t_address_town WHERE t_address_town.cityCode=(SELECT `code` FROM t_address_city WHERE `name`=?)";
			ps=con.prepareStatement(sql);
			ps.setString(1, cname);
			rs=ps.executeQuery();
			while (rs.next()) {
				townList.add(rs.getString("name"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			MySQLContent.closeAll(rs, ps, con);
		}
		return townList;
	}

 数据库连接代码都是死套路,可以自己写也可以看我的数据库连接https://blog.csdn.net/qq_41534115/article/details/83272484

猜你喜欢

转载自blog.csdn.net/qq_41534115/article/details/83272742
今日推荐