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这些字段。
创建包名
- 导入需要用到的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视频教程
也引用了传智播客的相关工具包,如有侵权,联系本人删除