java后台+ajax实现三级联动

前端部分代码:省份是预先加载出来的,访问这个页面的时候,在后台拿的数据,原理很简单,这里是freemaker的静态模版

 					<tr >
                        <td>
                            <label for="j_dialog_name" class="control-label x90">代理区域:</label>
                            <select name="agent.id" id="province" data-style="btn-default btn-sel" data-width="auto" style="width: 100px">
                                  <option value="0">-请选择-</option>
                                <#list listagent as agent>
                                  <option value="${agent.id}">${agent.cname}</option>
                                </#list>
                            </select><span></span>
                            <select name="agent.id" id="city" data-style="btn-default btn-sel" data-width="auto" style="width: 100px">
                                <option value="0">请选择</option>
                            </select><span></span>
                            <select name="agent.id" id="area" data-style="btn-default btn-sel" data-width="auto" style="width: 100px">
                                <option value="0">请选择</option>
                            </select><span>()</span>
                        </td>
                    </tr>

jq代码

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

   $("#city option:gt(0)").remove();//先清除市和县的下拉列表
    $("#area option:gt(0)").remove();
   var cityid=$(this).val()//获取省份选择的值
   console.log(cityid);//前台打印测试,这个不用管
    if(cityid!=0){//发送ajax请求
        $.ajax({
            url: "bycity",
            type: "post",
            dataType: "json",
            data:{
                cityid:cityid
            },
            async: true,
            success: function(data) {
                if(data.stauts==0){//拿到后台发过来的值
                    var list=data.list;
                    console.log(list);
                    for (var i = 0; i < list.length; i++) {
                        var district = list[i];//将数据里的对象遍历取出
                        $("#city").append(//添加下拉选项
                                "<option value='" + district.id + "'>"//将id作为选项的值
                                + district.cname + "</option>");
                    }
                }else{
                    alert(data.message);
                }

            }
        });
    }

});

//县,和上面一样的道理
$("#city").change(function () {

    $("#area option:gt(0)").remove();
    var cityid=$(this).val();
    console.log(cityid);
    if(cityid!=100){
        $.ajax({
            url: "bycity",
            type: "post",
            dataType: "json",
            data:{
                cityid:cityid
            },
            async: true,
            success: function(data) {
                if(data.stauts==0){
                    var list=data.list;
                    console.log(list);
                    for (var i = 0; i < list.length; i++) {
                        var district = list[i];//将数据里的对象遍历取出
                        $("#area").append(//添加下拉选项
                                "<option value='" + district.id + "'>"//将id作为选项的值
                                + district.cname + "</option>");
                    }
                }else{
                    alert(data.message);
                }
            }
        });
    }
}); </script>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现三级联动的基本思路是通过Ajax技术实现异步请求后端数据,然后动态生成页面元素实现级联效果。下面是一个Spring MVC+JSP实现三级联动的示例代码: 1. 前端JSP页面 ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>三级联动示例</title> <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ // 加载省份列表 $.ajax({ url: "${pageContext.request.contextPath}/province", type: "GET", success: function(data){ var provinceList = JSON.parse(data); var html = ""; for(var i=0; i<provinceList.length; i++){ html += "<option value='"+provinceList[i].id+"'>"+provinceList[i].name+"</option>"; } $("#province").html(html); } }); // 根据省份id加载城市列表 $("#province").change(function(){ var provinceId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/city/"+provinceId, type: "GET", success: function(data){ var cityList = JSON.parse(data); var html = ""; for(var i=0; i<cityList.length; i++){ html += "<option value='"+cityList[i].id+"'>"+cityList[i].name+"</option>"; } $("#city").html(html); } }); }); // 根据城市id加载区县列表 $("#city").change(function(){ var cityId = $(this).val(); $.ajax({ url: "${pageContext.request.contextPath}/district/"+cityId, type: "GET", success: function(data){ var districtList = JSON.parse(data); var html = ""; for(var i=0; i<districtList.length; i++){ html += "<option value='"+districtList[i].id+"'>"+districtList[i].name+"</option>"; } $("#district").html(html); } }); }); }); </script> </head> <body> <select id="province"> <option value="">请选择省份</option> </select> <select id="city"> <option value="">请选择城市</option> </select> <select id="district"> <option value="">请选择区县</option> </select> </body> </html> ``` 2. 后端Controller代码 ```java @Controller public class RegionController { @Autowired private RegionService regionService; @RequestMapping(value="/province", method=RequestMethod.GET) @ResponseBody public String getProvinceList(){ List<Province> provinceList = regionService.getProvinceList(); return JSON.toJSONString(provinceList); } @RequestMapping(value="/city/{provinceId}", method=RequestMethod.GET) @ResponseBody public String getCityList(@PathVariable("provinceId") String provinceId){ List<City> cityList = regionService.getCityList(provinceId); return JSON.toJSONString(cityList); } @RequestMapping(value="/district/{cityId}", method=RequestMethod.GET) @ResponseBody public String getDistrictList(@PathVariable("cityId") String cityId){ List<District> districtList = regionService.getDistrictList(cityId); return JSON.toJSONString(districtList); } } ``` 3. Service层代码 ```java @Service public class RegionServiceImpl implements RegionService { @Autowired private RegionDao regionDao; @Override public List<Province> getProvinceList() { return regionDao.getProvinceList(); } @Override public List<City> getCityList(String provinceId) { return regionDao.getCityList(provinceId); } @Override public List<District> getDistrictList(String cityId) { return regionDao.getDistrictList(cityId); } } ``` 4. DAO层代码 ```java @Repository public class RegionDaoImpl implements RegionDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public List<Province> getProvinceList() { String sql = "select province_id, province_name from tb_province"; List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class)); return provinceList; } @Override public List<City> getCityList(String provinceId) { String sql = "select city_id, city_name from tb_city where province_id=?"; List<City> cityList = jdbcTemplate.query(sql, new Object[]{provinceId}, new BeanPropertyRowMapper<City>(City.class)); return cityList; } @Override public List<District> getDistrictList(String cityId) { String sql = "select district_id, district_name from tb_district where city_id=?"; List<District> districtList = jdbcTemplate.query(sql, new Object[]{cityId}, new BeanPropertyRowMapper<District>(District.class)); return districtList; } } ``` 其中Province、City和District是数据实体类,包含id和name两个属性。以上代码只是一个简单示例,实际项目中需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值