通过ajax实现省市县三级联动

ajax实现省市县三级联动

先看效果

ajax实现省市县联动效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

** 创建index.jsp**
部分代码如下:

<body>
<div align="center">
<select name="province" id="province">
<option value="">===请选择===</option>
</select>
<select name="Cities" id="Cities">
<option value="">===请选择===</option>
</select>
<select name="Counties" id="Counties">
<option value="">===请选择===</option>
</select>
</div>
</body>

** 准备好中国行政划分数据**

这种表有ID ,NAME,PID,SNAME,CITYLEVEL和MERNAME这些字段。

创建包名

在这里插入图片描述

  1. 导入需要用到的jar包
    在这里插入图片描述

c3p0连接池配置
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
	<default-config> 
		<property name="jdbcUrl">jdbc:oracle:thin:@ip地址:1521:数据库名</property>
		<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
		<property name="user">用户名</property>
		<property name="password">密码</property>
		
		<property name="acquireIncrement">3</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">2</property>
		<property name="maxPoolSize">10</property>
	</default-config>
</c3p0-config>

创建省市县的实体类文件
省级城市实体类代码

public class Province {
	private int ID;
	private String NAME;
	private int PID;
	private String SNAME;
	private int CITYLEVEL;
	private String  MERNAME;
	}

市级城市实体类代码

public class Cities {
	private int ID;
	private String NAME;
	private int PID;
	private String SNAME;
	private int CITYLEVEL;
	private String  MERNAME;
	}

县区级城市实体类代码

public class Counties {
    private int ID;
	private String NAME;
	private int PID;
	private String SNAME;
	private int CITYLEVEL;
	private String  MERNAME;
	}

在dao包下创建ChinaCity类的文件

package cn.orz.city.dao;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import cn.itcast.jdbc.TxQueryRunner;
import cn.orz.city.domain.Cities;
import cn.orz.city.domain.Counties;
import cn.orz.city.domain.Province;


public class ChinaCity {

	private QueryRunner qr=new TxQueryRunner();
	
	//查询所有的省份
	 public List<Province> fiandProvince() {
		  try {  
		  String sql="select  t.*  from  CHINACITY  t where t.citylevel='1'";
		  
		  return  qr.query(sql,new BeanListHandler<Province>(Province.class));
		  
		} catch (SQLException e) {
			
			throw new RuntimeException(e);
		}
		
	}
	  
	// 查询省下的所有市  市的PID为省的ID
	  public List<Cities> fiandCities(int pid) {
		  try {  
		  String sql="select  t.*  from  CHINACITY  t where 1=1 and t.citylevel='2' and t.pid=?";
		
		  return  qr.query(sql,new BeanListHandler<Cities>(Cities.class),pid);
		  
		} catch (SQLException e) {
			
			throw new RuntimeException(e);
		}
		
	}
	// 查询市下的所有县区  县区的PID为市省的ID
	  public List<Counties> fiandCounties(int pid) {
		  try {  
		  String sql="select  t.*  from  CHINACITY  t where 1=1 and t.citylevel='3' and t.pid=?";
		  
		  return  qr.query(sql,new BeanListHandler<Counties>(Counties.class),pid);
		  
		} catch (SQLException e) {
			
			throw new RuntimeException(e);
		}
		
	}
	  

}

创建CityService类

package cn.orz.city.service;

import java.util.List;

import cn.orz.city.dao.ChinaCity;
import cn.orz.city.domain.Cities;
import cn.orz.city.domain.Counties;
import cn.orz.city.domain.Province;

public class CityService {
	
	ChinaCity chinacity=new ChinaCity();
	
	
	public List<Province> fiandProvince() {
		
		return chinacity.fiandProvince();
		
	}
	
	 public List<Cities> fiandCities(int pid) {
		
		 return chinacity.fiandCities(pid);
		 
	 }
	 
	 public List<Counties> fiandCounties(int pid) {
		
		 return chinacity.fiandCounties(pid);

      }

}

ProvinceServlet代码如下

package cn.orz.city.servlet;

import java.io.IOException;
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.google.gson.JsonArray;

import cn.orz.city.domain.Province;
import cn.orz.city.service.CityService;
import net.sf.json.JSONArray;

@WebServlet("/ProvinceServlet")
public class ProvinceServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		CityService cityservice=new CityService();
        List<Province> Provincelist =cityservice.fiandProvince();
		String json=JSONArray.fromObject(Provincelist).toString();
		response.getWriter().print(json);
		
	}


}

CitiesServlet代码如下

package cn.orz.city.servlet;

import java.io.IOException;
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 cn.orz.city.domain.Cities;
import cn.orz.city.service.CityService;
import net.sf.json.JSONArray;


@WebServlet("/CitiesServlet")
public class CitiesServlet 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");
		CityService cityservice=new CityService();
		int pid=Integer.parseInt(request.getParameter("pid"));
		 List<Cities> Citieslist=cityservice.fiandCities(pid);
		   String json=JSONArray.fromObject(Citieslist).toString();
		
			response.getWriter().print(json);
	}

}

CountiesServlet代码

package cn.orz.city.servlet;

import java.io.IOException;
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 cn.orz.city.domain.Counties;
import cn.orz.city.service.CityService;
import net.sf.json.JSONArray;


@WebServlet("/CountiesServlet")
public class CountiesServlet 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");
		CityService cityservice=new CityService();
		int pid=Integer.parseInt(request.getParameter("pid"));
		
		 List<Counties> Countieslist=cityservice.fiandCounties(pid);
		   String json=JSONArray.fromObject(Countieslist).toString();
		  
			response.getWriter().print(json);
	}

}

index.jsp中省市县联动核心代码

<script type="text/javascript">
function createXMLHttpRequest(){
	try{
		return new XMLHttpRequest();
	}catch(e){
		try{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			return new ActiveXObject("Micorsoft.XMLHTTP");
		}	
	}
}

 window.onload= function(){
	 
		//**省市县三级联动**//  
   var xmlHttp=createXMLHttpRequest();
   
	xmlHttp.open("GET","<c:url value='/ProvinceServlet'/>",true);
	
	xmlHttp.send(null);
	
	xmlHttp.onreadystatechange= function(){
		if(xmlHttp.readyState==4){
			if(xmlHttp.status==200){
			var  proArray=eval("("+xmlHttp.responseText+")");
			for(var i=0;i<proArray.length;i++){
				var pro=proArray[i];
				 
				var optionEle=document.createElement("option");
				    optionEle.value=pro.ID;
				   
				var textNode=document.createTextNode(pro.NAME);
				
				optionEle.appendChild(textNode);
			
				document.getElementById("province").appendChild(optionEle);
			}
		  }
		}
		
	};
	
	document.getElementById("province").onchange=function(){
		 var xmlHttp=createXMLHttpRequest();
		 
		 xmlHttp.open("POST","<c:url value='/CitiesServlet'/>",true);
		 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		 xmlHttp.send("pid="+this.value);
		 xmlHttp.onreadystatechange= function(){
			if(xmlHttp.readyState==4){
				if(xmlHttp.status==200){
				var citiesselect=document.getElementById("Cities");
				
				var citiesoptionArray=citiesselect.getElementsByTagName("option");
				
				
					while(citiesoptionArray.length>1){
						citiesselect.removeChild(citiesoptionArray[1]);
					}
				var  citiesArray=eval("("+xmlHttp.responseText+")");
				
				for(var i=0;i<citiesArray.length;i++){
					var cities=citiesArray[i];
					 
					var optionEle=document.createElement("option");
					    optionEle.value=cities.ID;
					   
					var textNode=document.createTextNode(cities.NAME);
					
					optionEle.appendChild(textNode);
				
					citiesselect.appendChild(optionEle);
				    }
				  }
				}
			};
	
			
		
			document.getElementById("Cities").onchange=function(){
				
				var xmlHttp=createXMLHttpRequest();
				
				xmlHttp.open("POST","<c:url value='/CountiesServlet'/>",true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.send("pid="+this.value);
				 xmlHttp.onreadystatechange= function(){
					 if(xmlHttp.readyState==4){
					 if(xmlHttp.status==200){
					 var Countiesselect=document.getElementById("Counties");
					 						
					 var CountiesoptionArray=Countiesselect.getElementsByTagName("option");
					 						
					 						
					 while(CountiesoptionArray.length>1){
					 	Countiesselect.removeChild(CountiesoptionArray[1]);
					 }
					 		var  CountiesArray=eval("("+xmlHttp.responseText+")");
					 						
					 			for(var i=0;i<CountiesArray.length;i++){
					 				var Counties=CountiesArray[i];
					 							 
					 				var optionEle=document.createElement("option");
					 				    optionEle.value=Counties.ID;
					 							   
					 				var textNode=document.createTextNode(Counties.NAME);
					 							
					 				optionEle.appendChild(textNode);
					 				Countiesselect.appendChild(optionEle);
					 			}
					 	     }
					 	}
					  };	
				
				
				
			};
	};
	
 }

</script>

完整的index.jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
<script type="text/javascript">
function createXMLHttpRequest(){
	try{
		return new XMLHttpRequest();
	}catch(e){
		try{
			return new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			return new ActiveXObject("Micorsoft.XMLHTTP");
		}	
	}
}

 window.onload= function(){
	 
		//**省市县三级联动**//  
   var xmlHttp=createXMLHttpRequest();
   
	xmlHttp.open("GET","<c:url value='/ProvinceServlet'/>",true);
	
	xmlHttp.send(null);
	
	xmlHttp.onreadystatechange= function(){
		if(xmlHttp.readyState==4){
			if(xmlHttp.status==200){
			var  proArray=eval("("+xmlHttp.responseText+")");
			for(var i=0;i<proArray.length;i++){
				var pro=proArray[i];
				 
				var optionEle=document.createElement("option");
				    optionEle.value=pro.ID;
				   
				var textNode=document.createTextNode(pro.NAME);
				
				optionEle.appendChild(textNode);
			
				document.getElementById("province").appendChild(optionEle);
			}
		  }
		}
		
	};
	
	document.getElementById("province").onchange=function(){
		 var xmlHttp=createXMLHttpRequest();
		 
		 xmlHttp.open("POST","<c:url value='/CitiesServlet'/>",true);
		 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		 xmlHttp.send("pid="+this.value);
		 xmlHttp.onreadystatechange= function(){
			if(xmlHttp.readyState==4){
				if(xmlHttp.status==200){
				var citiesselect=document.getElementById("Cities");
				
				var citiesoptionArray=citiesselect.getElementsByTagName("option");
				
				
					while(citiesoptionArray.length>1){
						citiesselect.removeChild(citiesoptionArray[1]);
					}
				var  citiesArray=eval("("+xmlHttp.responseText+")");
				
				for(var i=0;i<citiesArray.length;i++){
					var cities=citiesArray[i];
					 
					var optionEle=document.createElement("option");
					    optionEle.value=cities.ID;
					   
					var textNode=document.createTextNode(cities.NAME);
					
					optionEle.appendChild(textNode);
				
					citiesselect.appendChild(optionEle);
				    }
				  }
				}
			};
	
			
		
			document.getElementById("Cities").onchange=function(){
				
				var xmlHttp=createXMLHttpRequest();
				
				xmlHttp.open("POST","<c:url value='/CountiesServlet'/>",true);
				xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp.send("pid="+this.value);
				 xmlHttp.onreadystatechange= function(){
					 if(xmlHttp.readyState==4){
					 if(xmlHttp.status==200){
					 var Countiesselect=document.getElementById("Counties");
					 						
					 var CountiesoptionArray=Countiesselect.getElementsByTagName("option");
					 						
					 						
					 while(CountiesoptionArray.length>1){
					 	Countiesselect.removeChild(CountiesoptionArray[1]);
					 }
					 		var  CountiesArray=eval("("+xmlHttp.responseText+")");
					 						
					 			for(var i=0;i<CountiesArray.length;i++){
					 				var Counties=CountiesArray[i];
					 							 
					 				var optionEle=document.createElement("option");
					 				    optionEle.value=Counties.ID;
					 							   
					 				var textNode=document.createTextNode(Counties.NAME);
					 							
					 				optionEle.appendChild(textNode);
					 				Countiesselect.appendChild(optionEle);
					 			}
					 	     }
					 	}
					  };	
				
				
				
			};
	};
	
 }

</script>

</head>
<body>


<div align="center">
<select name="province" id="province">
<option value="">===请选择===</option>
</select>

<select name="Cities" id="Cities">
<option value="">===请选择===</option>
</select>

<select name="Counties" id="Counties">
<option value="">===请选择===</option>
</select>
</div>

</body>
</html>

总结:
代码借鉴传智播客的黑马程序员_超全面的JavaWeb视频教程
也引用了传智播客的相关工具包,如有侵权,联系本人删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值