Ajax——AJAX实现省市联动

说明;
    利用Ajax实现省市联动的过程很简单,只需要发送两次ajax请求,第一次自动ajax请求,向数据库中读取所有省份的数据,第二次是在省份发生改变的时候发送第二次Ajax请求,向数据库中读取所有的市级地区,将对应的地区显示在选择标签中。

1. 省市联动含义?

  • 在网页上,选择对应的省份之后,动态的关联出该省份对应的市。选择对应的市之后,动态的关联出该市对应的区。

2. 建立数据库表

t_area (区域表)
id(PK-自增)	  code		name		pcode
---------------------------------------------
1				001		 河北省		null
2				002		 河南省		null
3				003		 石家庄	    001
4				004		 邯郸			 001
5				005		 郑州			 002
6				006		 洛阳			 002
7				007		 丛台区	    004  

将全国所有的省、市、区、县等信息都存储到一张表当中。
采用的存储方式实际上是code pcode形势。
  • 将数据存放到数据库
    在这里插入图片描述

3. 功能实现

  • 创建一个页面:两个select标签

  • 创建一个JavaBean:用来存放从数据库中读取的数据,添加到List集合中,方便使用阿里的JSON转换格式

  • 创建一个Java程序:LianDongServlet

    • 代码实现
    • 这里发送Ajax使用的是jQuery库封装好的代码

前端页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>实现省市联动</title>
</head>
<body>

<script type="text/javascript" src="/ajax/js/jQuery-1.0.0.js"></script>

<script type="text/javascript">

    $(function () {
        $.ajax({
            type: "GET",
            url: "/ajax/listarea",
            data: "t="+new Date().getTime(),
            async: true,

            success: function (json) {
                var html = "<option value=''>--请选择--</option>"
                for (var i = 0; i < json.length; i++) {
                    var area = json[i];
                    var pname = area.name;
                    var code = area.code;

                    html += "<option value='"+code+"'>"+pname+"</option>"
                }
                $("#province").html(html)
            }
        })

        $("#province").change(function (){

            // alert(this.value)
            //发送Ajax请求
            $.ajax({
                type: "GET",
                url: "/ajax/listarea",
                data: "pcode="+this.value,
                async: true,

                success: function (json) {
                    var html = "<option value=''>--请选择--</option>"
                    for (var i = 0; i < json.length; i++) {
                        var area = json[i];
                        var pname = area.name;
                        var code = area.code;

                        html += "<option value='"+code+"'>"+pname+"</option>"
                    }
                    $("#city").html(html)
                }
            })
        })
    })



</script>

<h1 align="center">实现省市联动</h1>

<select id="province">

</select>

<select id="city">

</select>
</body>
</html>

Servlet程序

@WebServlet("/listarea")
public class LianDongServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.getParameter("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String pcode = request.getParameter("pcode");

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        List<Area> areaList = new ArrayList<>();

        try {
            conn = DBUtil.getConnection();
            String sql = "";
            if (pcode == null){
                sql = "select * from t_area where pcode is NULL";
                ps = conn.prepareStatement(sql);
            }else {
                sql = "select * from  t_area where pcode = ?";
                ps = conn.prepareStatement(sql);
                ps.setString(1,pcode);
            }


            rs = ps.executeQuery();

            while (rs.next()){
                String name = rs.getString("name");
                String code = rs.getString("code");

                Area area = new Area(code, name);
                areaList.add(area);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close( conn,ps,rs);
        }

        String jsonString = JSON.toJSONString(areaList);
        out.print(jsonString);
    }
}

JavaBean

package com.lcl.ajax.bean;

import java.util.Objects;

/**
 * @Author Administration
 * @PackageName NewWeb
 * @Package com.lcl.ajax.bean
 * @Date 2022/8/19 17:32
 * @Description:
 */
public class Area {

    private String code;
    private String name;

    public Area() {
    }

    public Area(String code, String name) {
        this.code = code;
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Area{" +
                "code=" + code +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Area area = (Area) o;
        return code == area.code && Objects.equals(name, area.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(code, name);
    }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现二级(多级)联动的方法一般有两种,一种是通过页面刷新实现,另一种是通过Ajax实现。下面我将介绍一种基于Ajax实现方法。 首先,在前端页面中建立两个下拉框,第一个下拉框用于选择省份,第二个下拉框用于选择城市。当选择省份后,第二个下拉框中应该只显示该省份下的城市列表。 在后端,我们需要编写一个Web服务,用于获取城市列表。该Web服务应该接收省份名称作为参数,并返回该省份下的城市列表。在Asp.Net中,我们可以使用WebMethod来实现该功能。 然后,在前端页面中,我们需要使用Ajax来调用该Web服务,并将返回的城市列表显示在第二个下拉框中。具体实现方法如下: ```javascript // 定义一个函数,用于获取城市列表 function getCityList(province) { $.ajax({ type: "POST", url: "CityService.asmx/GetCityList", data: "{'province':'" + province + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { // 将返回的城市列表显示在第二个下拉框中 var cityList = response.d; var citySelect = $("#citySelect"); citySelect.empty(); for (var i = 0; i < cityList.length; i++) { var cityOption = "<option value='" + cityList[i] + "'>" + cityList[i] + "</option>"; citySelect.append(cityOption); } }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); } // 当选择省份时,调用getCityList函数获取城市列表 $("#provinceSelect").change(function () { var province = $(this).val(); getCityList(province); }); ``` 需要注意的是,getCityList函数中的url应该指向我们编写的Web服务的地址。另外,我们还需要在Web.config文件中配置一些内容,具体可以参考相关文档。 这样,我们就实现了基于Ajax的二级(多级)联动功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值