Ajax之三级联动

Ajax练习:利用Ajax实现省、市、县三级联动显示,实现代码如下:

HTML代码

<body onload="demo()">
    省:
    <select id="pro" onchange="demo1(this.value)">
        <option>--请选择--</option>
    </select>
    市:
    <select id="city" onchange="demo2(this.value)">
        <option>--请选择--</option>
    </select>
    县:
    <select id="country">
        <option>--请选择--</option>
    </select>
</body>

JS代码

<script type="text/javascript">
    function demo() {
        $.ajax({
            type:"get",
            url:"ajax2",
            data:"id=0",
            dataType:"json",
            success:function (data) {
                $("#pro").html("<option>--请重新选择--</option>");
                for(var i in data){
                    $("#pro").append("<option value='"+data[i].areaid+"'>"+data[i].areaname+"</option>")
                }
            }
        })
    }
        function demo1(val) {
            $.ajax({
                type: "get",
                url: "ajax2",
                data: "id=" + val,
                dataType: "json",
                success: function (data) {
                    $("#city").html("<option>--请重新选择--</option>");
                    for (var i in data) {
                        $("#city").append("<option value='" + data[i].areaid + "'>" + data[i].areaname + "</option>")
                    }
                }
            })
        }
            function demo2(val) {
                $.ajax({
                    type: "get",
                    url: "ajax2",
                    data: "id=" + val,
                    dataType: "json",
                    success: function (data) {
                        $("#country").html("<option>--请重新选择--</option>");
                        for (var i in data) {
                            $("#country").append("<option value='" + data[i].areaid + "'>" + data[i].areaname + "</option>")
                        }
                    }
                })

            }
</script>

Servlet代码

@WebServlet("/ajax2")
public class AjaxServlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //设置响应编码格式
        resp.setContentType("text/html;charset=utf-8");
        //接收页面数据
        int pid = Integer.parseInt(req.getParameter("id"));
        //处理数据
        AreaService as = new AreaServiceImpl();
        ArrayList<Area> list = as.findMore(pid);
        //做出响应
        Gson gson = new Gson();
        String json = gson.toJson(list);
        resp.getWriter().print(json);
    }
}

Service层代码

public class AreaServiceImpl implements AreaService{
    @Override
    public ArrayList<Area> findMore(int pid) {
        AreaDao ad = new AreaDaoImpl();
        List<Area> list = ad.queryMore(pid);
        return (ArrayList<Area>) list;
    }
}

Dao层代码

public class AreaDaoImpl implements AreaDao {
    @Override
    public List<Area> queryMore(int pid) {
        //编写sql语句(原生sql)
        String sql ="select * from area where parentid=?";
        Object [] obj ={pid};
        ResultSet rs = DBUtil.executeQuery(sql, obj);
        ArrayList<Area> list = new ArrayList<>();
        try {
            while (rs.next()){
                int areaid = rs.getInt("areaid");
                int parentid = rs.getInt("parentid");
                String areaname = rs.getString("areaname");
                //第一种方式
             /*   Area area = new Area();
                area.setAreaid(areaid);
                area.setParentid(parentid);
                area.setAreaname(areaname);*/
             Area area = new Area(areaid,areaname,parentid);
                list.add(area);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //关闭资源
            DBUtil.closeAll();
        }
        return list;
    }
}

Entity代码

public class Area {
    private Integer areaid;
    private String areaname;
    private Integer parentid;

    public Integer getAreaid() {
        return areaid;
    }

    public void setAreaid(Integer areaid) {
        this.areaid = areaid;
    }

    public String getAreaname() {
        return areaname;
    }

    public void setAreaname(String areaname) {
        this.areaname = areaname;
    }

    public Integer getParentid() {
        return parentid;
    }

    public void setParentid(Integer parentid) {
        this.parentid = parentid;
    }

    public Area(Integer areaid, String areaname, Integer parentid) {
        this.areaid = areaid;
        this.areaname = areaname;
        this.parentid = parentid;
    }

    public Area() {
    }

    @Override
    public String toString() {
        return "Area{" +
                "areaid=" + areaid +
                ", areaname='" + areaname + '\'' +
                ", parentid=" + parentid +
                '}';
    }
}

结果如下:

小结:

(1)三级联动的实现,在数据库方面涉及到自关联的设计思想,本练习是通过pid实现

(2)onchange事件可以传递当前选中选项的值,传递到后台处理,然后在响应到页面

(3)分层设计思想MVC,降低各层的耦合性,优化代码

(4)onload页面载入函数,页面加载时执行,页面加载完成实现将省的内容全部查询出来

(5)数据响应格式(响应到页面的数据),这里使用的json格式,需要导入Gson包,实现转换

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Ajax实现三级联动的效果。以下是一个简单的示例代码,假设有三个下拉列表,分别是省、市和区县: HTML部分: ```html <select id="province"> <option value="">请选择省份</option> <!--省份选项--> </select> <select id="city"> <option value="">请选择城市</option> <!--城市选项--> </select> <select id="county"> <option value="">请选择区县</option> <!--区县选项--> </select> ``` JavaScript部分: ```javascript // 获取省份列表 function getProvinces() { // 发送Ajax请求获取省份数据 // 可以使用XMLHttpRequest或者jQuery的$.ajax方法进行请求 } // 获取城市列表 function getCities(provinceId) { // 发送Ajax请求获取城市数据,传递选中的省份ID } // 获取区县列表 function getCounties(cityId) { // 发送Ajax请求获取区县数据,传递选中的城市ID } // 监听省份选择变化事件 document.getElementById('province').addEventListener('change', function() { var provinceId = this.value; if (provinceId) { // 获取城市列表 getCities(provinceId); } else { // 清空城市和区县列表 document.getElementById('city').innerHTML = '<option value="">请选择城市</option>'; document.getElementById('county').innerHTML = '<option value="">请选择区县</option>'; } }); // 监听城市选择变化事件 document.getElementById('city').addEventListener('change', function() { var cityId = this.value; if (cityId) { // 获取区县列表 getCounties(cityId); } else { // 清空区县列表 document.getElementById('county').innerHTML = '<option value="">请选择区县</option>'; } }); ``` 在上述代码中,通过Ajax请求获取省份、城市和区县的数据,并将数据动态填充到对应的下拉列表中。当省份选择变化时,触发相应的Ajax请求获取对应的城市列表;当城市选择变化时,触发相应的Ajax请求获取对应的区县列表。根据实际情况,你需要实现相应的后端接口来提供省份、城市和区县的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值