jQuery+ajax实现省市区(县)下拉框三级联动

jQuery+ajax实现省市区(县)下拉框三级联动

一,首先创建数据库
在这里插入图片描述
为数据表添加数据
省级表
在这里插入图片描述
市级表
在这里插入图片描述
区(县)级表
在这里插入图片描述
二,代码实现
首先是我的项目结构
在这里插入图片描述
1,创建实体类和工具类
省实体类

package cn.tb.entity;

public class Province {
    
    
    private int pid;
    private String pname;
    public int getPid() {
    
    
        return pid;
    }
    public void setPid(int pid) {
    
    
        this.pid = pid;
    }
    public String getPname() {
    
    
        return pname;
    }
    public void setPname(String pname) {
    
    
        this.pname = pname;
    }
    public Province(int pid, String pname) {
    
    
        this.pid = pid;
        this.pname = pname;
    }
    public Province() {
    
    
    }
    @Override
    public String toString() {
    
    
        return "Province{" + "pid=" + pid + ", pname='" + pname + '\'' + '}';
    }
}

市实体类

package cn.tb.entity;

public class City {
    
    
    private int cid;
    private String cname;
    private int pid;
    public int getCid() {
    
    
        return cid;
    }
    public void setCid(int cid) {
    
    
        this.cid = cid;
    }
    public String getCname() {
    
    
        return cname;
    }
    public void setCname(String cname) {
    
    
        this.cname = cname;
    }
    public int getPid() {
    
    
        return pid;
    }
    public void setPid(int pid) {
    
    
        this.pid = pid;
    }
    public City(int cid, String cname, int pid) {
    
    
        this.cid = cid;
        this.cname = cname;
        this.pid = pid;
    }
    public City() {
    
    
    }
    @Override
    public String toString() {
    
    
        return "City{" + "cid=" + cid + ", cname='" + cname + '\'' + ", pid=" + pid + '}';
    }
}

区(县)实体类

package cn.tb.entity;

public class Area {
    
    
    private int aid;
    private String aname;
    private int cid;
    public int getAid() {
    
    
        return aid;
    }
    public void setAid(int aid) {
    
    
        this.aid = aid;
    }
    public String getAname() {
    
    
        return aname;
    }
    public void setAname(String aname) {
    
    
        this.aname = aname;
    }
    public int getCid() {
    
    
        return cid;
    }
    public void setCid(int cid) {
    
    
        this.cid = cid;
    }
    public Area(int aid, String aname, int cid) {
    
    
        this.aid = aid;
        this.aname = aname;
        this.cid = cid;
    }
    public Area() {
    
    
    }
    @Override
    public String toString() {
    
    
        return "Area{" + "aid=" + aid + ", aname='" + aname + '\'' + ", cid=" + cid + '}';
    }
}

工具类 用于连接数据库

package cn.dbhelper;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBHelper {
    
    
    //获取数据库连接     jqueryajaxdemo数据库名称
    public static final String URL="jdbc:mysql://localhost:3306/jqueryajaxdemo?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC";
    //获取数据库账号
    public static final String NAME="root";
    //获取数据库连接
    public static final String PWD="root";
    //加载驱动
    public static Connection conn;
    public static Connection getConn(){
    
    
        try {
    
    
            Class.forName("com.mysql.jdbc.Driver");
            try {
    
    
                conn = DriverManager.getConnection(URL,NAME,PWD);
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
    
    
            e.printStackTrace();
        }
        return conn;
    }
    //关闭数据库连接
    public static void realease(Connection conn){
    
    
        if (conn!=null){
    
    
            try {
    
    
                conn.close();
            } catch (SQLException e) {
    
    
                e.printStackTrace();
            }
        }
    }
    //测试连接
    public static void main(String[] args) {
    
    
        System.out.println(DBHelper.getConn());
    }
}

2,前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <!--加载jQuery文件-->
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
</head>
<body>
<select name="province" id="province">
    <option value="0">请选择</option>
</select><select name="city" id="city">
    <option value="0">请选择</option>
</select><select name="area" id="area">
    <option value="0">请选择</option>
</select>/<!--获取所有的省-->
<script>
    $(function () {
    
    
        $.ajax({
    
    
            type:"get",
            url:"findProvince",
            dataType:"json",
            success:function (data) {
    
    
                var pro = $("#province");
                for(var i=0;i<data.length;i++){
    
    
                    var opt="<option value='"+data[i].pid+"'>"+data[i].pname+"</option>"
                    pro.append(opt)
                }
            }
        })
    })
</script>
<script>
    <!--获取所有的市-->
    function find() {
    
    
        $(function () {
    
    
            $("#city option").remove();
            $.ajax({
    
    
                type:"get",
                async:false,
                url:"findCity?pid="+$("#province").val(),
                dataType:"json",
                success:function (data) {
    
    
                    if(data==""){
    
    
                        $("#city").html("<option>请选择</option>")
                    }
                    var city=$("#city")
                    for (var i=0;i<data.length;i++){
    
    
                        var ob="<option value='"+data[i].cid+"'>"+data[i].cname+"</option>"
                        city.append(ob)
                    }
                }
            })
        })
    }
    <!--获取所有的区或县-->
    function find1() {
    
    
        $(function () {
    
    
            $("#area option").remove()
            $.ajax({
    
    
                type:"get",
                async:false,
                url:"findArea?cid="+$("#city").val(),
                dataType:"json",
                success:function (data) {
    
    
                    var area=$("#area")
                    for(var i=0;i<data.length;i++){
    
    
                        var ar="<option value='"+data[i].aid+"'>"+data[i].aname+"</option>"
                        area.append(ar)
                    }
                }
            })
        })
    }
    <!--重新调用上面的函数-->
    $("#province").change(function () {
    
    
        find();
        find1()
    })
    $("#city").change(function () {
    
    
        find1();
    })
</script>
</body>
</html>

前端页面运行结果:
在这里插入图片描述
3,查找所有的省
3.1 接口

package cn.tb.dom;

import cn.tb.entity.Province;
import java.util.List;

public interface ProvinceDom {
    
    
    public List<Province> findProvince();
}

3.2 接口实现类

package cn.tb.dom.impl;

import cn.dbhelper.DBHelper;
import cn.tb.dom.ProvinceDom;
import cn.tb.entity.Province;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ProvinceImpl implements ProvinceDom{
    
    
    @Override
    public List<Province> findProvince() {
    
    
        Connection conn = DBHelper.getConn();
        List<Province> provinceList = new ArrayList<>();
        String sql="select * from province";
        try {
    
    
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
    
    
                Province province = new Province();
                province.setPid(rs.getInt(1));
                province.setPname(rs.getString(2));
                provinceList.add(province);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return provinceList;
    }
}

3.3 servlet 类

package cn.tb.servlet;

import cn.tb.dom.ProvinceDom;
import cn.tb.dom.impl.ProvinceImpl;
import cn.tb.entity.Province;
import com.alibaba.fastjson.JSONObject;

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 java.io.IOException;
import java.util.List;

@WebServlet("/findProvince")
public class ProvinceServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        ProvinceDom provinceDom = new ProvinceImpl();
        List<Province> list = provinceDom.findProvince();
        response.getWriter().write(JSONObject.toJSONString(list));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

4,查找所有的市
4.1 接口

package cn.tb.dom;
import cn.tb.entity.City;
import java.util.List;
public interface CityDom {
    
    
    public List<City> findCity(int pid);
}

4.2 接口实现类

package cn.tb.dom.impl;

import cn.dbhelper.DBHelper;
import cn.tb.dom.CityDom;
import cn.tb.entity.City;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class CityImpl implements CityDom{
    
    
    @Override
    public List<City> findCity(int pid) {
    
    
        Connection conn = DBHelper.getConn();
        List<City> cityList = new ArrayList<>();
        String sql="select * from city where pid=?";
        try {
    
    
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,pid);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
    
    
                City city = new City();
                city.setCid(rs.getInt(1));
                city.setCname(rs.getString(2));
                city.setPid(rs.getInt(3));
                cityList.add(city);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return cityList;
    }
}

4.3 servlet类

package cn.tb.servlet;

import cn.tb.dom.CityDom;
import cn.tb.dom.impl.CityImpl;
import cn.tb.entity.City;
import com.alibaba.fastjson.JSONObject;
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 java.io.IOException;
import java.util.List;

@WebServlet("/findCity")
public class CityServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String pid = request.getParameter("pid");
        CityDom cityDom = new CityImpl();
        List<City> cities = cityDom.findCity(Integer.parseInt(pid));
        response.getWriter().write(JSONObject.toJSONString(cities));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

5,查找所有的区(县)
5.1 接口

package cn.tb.dom;
import cn.tb.entity.Area;
import java.util.List;
public interface AreaDom {
    
    
    public List<Area> findArea(int cid);
}

5.2 接口实现类

package cn.tb.dom.impl;

import cn.dbhelper.DBHelper;
import cn.tb.dom.AreaDom;
import cn.tb.entity.Area;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class AreaImpl implements AreaDom{
    
    
    @Override
    public List<Area> findArea(int cid) {
    
    
        Connection conn = DBHelper.getConn();
        List<Area> areaList = new ArrayList<>();
        String sql="select * from area where cid=?";
        try {
    
    
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,cid);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
    
    
                Area area = new Area();
                area.setAid(rs.getInt(1));
                area.setAname(rs.getString(2));
                area.setCid(rs.getInt(3));
                areaList.add(area);
            }
        } catch (SQLException e) {
    
    
            e.printStackTrace();
        }
        return areaList;
    }
}

5.3 servlet类

package cn.tb.servlet;

import cn.tb.dom.AreaDom;
import cn.tb.dom.impl.AreaImpl;
import cn.tb.entity.Area;
import com.alibaba.fastjson.JSONObject;
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 java.io.IOException;
import java.util.List;

@WebServlet("/findArea")
public class AreaServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String cid = request.getParameter("cid");
        AreaDom areaDom = new AreaImpl();
        List<Area> areas = areaDom.findArea(Integer.parseInt(cid));
        response.getWriter().write(JSONObject.toJSONString(areas));
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

三,整体运行结果
选择省,会自动显示该省对应的市和区(县),改变市会显示该市对应的区(县)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/tan1024/article/details/114884915