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

一、准备工作
数据库:
province(省)
在这里插入图片描述
city(市)
在这里插入图片描述
area(区)
在这里插入图片描述
utils工具包:
连接数据库

package cn.zc.utils;

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

public class DBHelper {
    //    Mysql5.5及以上版本需要在数据库名称后面添加?charart---等解释,5.5以下的版本则不用
    public static final String URL="JDBC:mysql://localhost:3306/chick?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
    //    数据库账号
    public static final String USERNAME="root";
    //    账号密码
    public static final String PSW="123456";
    public static Connection Conn;

    public static Connection getConn(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            try {
                Conn = DriverManager.getConnection(URL,USERNAME,PSW);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return Conn;
    }
    //    关闭数据库
    public static void closeconn(Connection conn){
        if (Conn!=null){
            try {
                Conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //若不为空则代表连接成功
    public static void main(String[] args) {
        System.out.println(DBHelper.getConn());
    }
}

domin包:
Province对象

package cn.zc.domain;

public class Province {
    public Integer pid;
    public String pname;

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public Province(Integer pid, String pname) {
        this.pid = pid;
        this.pname = pname;
    }

    public Province() {
    }

    @Override
    public String toString() {
        return "Province{" +
                "pid=" + pid +
                ", pname='" + pname + '\'' +
                '}';
    }
}

City对象:

package cn.zc.domain;

public class City {
    public Integer cid;
    public String cname;
    public Integer pid;

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public City() {
    }

    public City(Integer cid, String cname, Integer pid) {
        this.cid = cid;
        this.cname = cname;
        this.pid = pid;
    }

    @Override
    public String toString() {
        return "City{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", pid=" + pid +
                '}';
    }
}

Area对象:

package cn.zc.domain;

public class Area {

    public Integer aid;
    public String aname;
    public Integer cid;

    public Integer getAid() {
        return aid;
    }

    public void setAid(Integer aid) {
        this.aid = aid;
    }

    public String getAname() {
        return aname;
    }

    public void setAname(String aname) {
        this.aname = aname;
    }

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public Area() {
    }

    public Area(Integer aid, String aname, Integer cid) {
        this.aid = aid;
        this.aname = aname;
        this.cid = cid;
    }

    @Override
    public String toString() {
        return "Area{" +
                "aid=" + aid +
                ", aname='" + aname + '\'' +
                ", cid=" + cid +
                '}';
    }
}

二、前端页面

<%--
  Created by IntelliJ IDEA.
  User: zhang
  Date: 2021/03/03
  Time: 11:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>三级联动</title>
    <script src="js/jquery-3.4.1.js"></script>
    <script>
        $(function () {
            $.ajax({
                type:"get",
                url:"findprovince",
                dataType:"json",
                success:function (data) {
                    var obj = $('#province');
                    for(var i=0;i<data.length;i++){
                        var ob = "<option value='"+data[i].pid+"'>"+data[i].pname+"</option>";
                            obj.append(ob);
                    }
                }
            });

            $('#province').change(function () {
                $('#city option').remove();
                $.ajax({
                    type:"get",
                    //关闭异步
                    async:false,
                    url:"findcity?id="+$('#province').val(),
                    dataType:"json",
                    success:function (data) {
                        var obj = $('#city');
                        for(var i=0;i<data.length;i++){
                            var ob = "<option value='"+data[i].cid+"'>"+data[i].cname+"</option>";
                            obj.append(ob);
                        }
                    }
                });
            });

            $('#city,#province').change(function () {//省或市任一更改时,区都会发生变化
                $('#area option').remove();
                $.ajax({
                    type:"get",
                    async:false,
                    url:"findarea?id="+$('#city').val(),
                    dataType:"json",
                    success:function (data) {
                        var obj = $('#area');
                        for(var i=0;i<data.length;i++){
                            var ob = "<option value='"+data[i].aid+"'>"+data[i].aname+"</option>";
                            obj.append(ob);
                        }
                    }
                });
            });
        });

    </script>
</head>
<body>
    <select id="province">
        <option value="0" disabled selected hidden>请选择</option>
    </select><select id="city">
        <option value="0" disabled selected hidden>请选择</option>
    </select><select id="area">
        <option value="0" disabled selected hidden>请选择</option>
    </select>区/县
</body>
</html>

三、构建后端实现方法
province
servlet层:

package cn.zc.servlet;

import cn.zc.dao.Impl.ProvinceDaoImpl;
import cn.zc.dao.ProvinceDao;
import cn.zc.domain.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.ArrayList;

@WebServlet("/findprovince")
public class FindProvinceServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        ArrayList<Province> plists = new ArrayList<>();
        ProvinceDao provinceDao = new ProvinceDaoImpl();
        plists = provinceDao.findprovince();
        response.getWriter().write(JSONObject.toJSONString(plists));
    }

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

Dao和Impl

package cn.zc.dao;

import cn.zc.domain.Province;

import java.util.ArrayList;

public interface ProvinceDao {
    ArrayList<Province> findprovince();
}

package cn.zc.dao.Impl;

import cn.zc.dao.ProvinceDao;
import cn.zc.domain.Province;
import cn.zc.utils.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

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

city:
servlet:

package cn.zc.servlet;

import cn.zc.dao.CityDao;
import cn.zc.dao.Impl.CityDaoImpl;
import cn.zc.domain.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.ArrayList;

@WebServlet("/findcity")
public class FindCityServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        ArrayList<City> clist = new ArrayList<>();
        String id = request.getParameter("id");
        CityDao cityDao = new CityDaoImpl();
        clist = cityDao.findCityById(Integer.parseInt(id));
        response.getWriter().write(JSONObject.toJSONString(clist));
    }

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

dao和Impl

package cn.zc.dao;

import cn.zc.domain.City;

import java.util.ArrayList;

public interface CityDao {
    ArrayList<City> findCityById(int id);
}

package cn.zc.dao.Impl;

import cn.zc.dao.CityDao;
import cn.zc.domain.City;
import cn.zc.utils.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class CityDaoImpl implements CityDao {
    @Override
    public ArrayList<City> findCityById(int id) {
        Connection conn = DBHelper.getConn();
        ArrayList<City> clist = new ArrayList<>();
        String sql = "select *from city where pid=?";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            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));
                clist.add(city);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return clist;
    }
}

Area:
servlet:

package cn.zc.servlet;

import cn.zc.dao.AreaDao;
import cn.zc.dao.Impl.AreaDaoImpl;
import cn.zc.domain.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.ArrayList;

@WebServlet("/findarea")
public class FindAreaServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        ArrayList<Area> alist = new ArrayList<>();
        String id = request.getParameter("id");
        AreaDao areaDao = new AreaDaoImpl();
        alist = areaDao.findAreaById(Integer.parseInt(id));
        response.getWriter().write(JSONObject.toJSONString(alist));
    }

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

Dao和Impl

package cn.zc.dao;

import cn.zc.domain.Area;

import java.util.ArrayList;

public interface AreaDao {
    ArrayList<Area> findAreaById(int id);
}

package cn.zc.dao.Impl;

import cn.zc.dao.AreaDao;
import cn.zc.domain.Area;
import cn.zc.utils.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class AreaDaoImpl implements AreaDao {
    @Override
    public ArrayList<Area> findAreaById(int id) {
        ArrayList<Area> alist = new ArrayList<>();
        Connection conn = DBHelper.getConn();
        String sql = "select *from area where cid=?";
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,id);
            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));
                alist.add(area);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return alist;
    }
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值