SpringBoot+AJAX动态三级联动全国地址联动

在某宝和某东确定订单的时候,收货地址填写会实时更新。多的不说上代码。

效果图:
在这里插入图片描述
1.表结构和思路解析
在这里插入图片描述

在这里插入图片描述
表数据就是一个三级的数据展示,pid就是每个分层的标识
比如:我要查询一级的包含了中国的省级

在这里插入图片描述
也就是在我改变每个阶层的时候去加载当前阶层的pid就ok

select * from gf_cityaddress where pid=0;

2.代码逻辑

1.前端代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%
	String path=request.getContextPath();
%>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
 <link rel="stylesheet" type="text/css" href="<%=path%>/css/index_work.css"/> 
<script type="text/javascript" src="<%=path%>/js/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
    $(function(){
    	  var provinceName="";
    	  var cityName="";
    	  var countryName="";
    	$.ajax({
    	   url:"/showCity",
    	   type:"post",
    	   data:{pid:0},
    	   success:function(obj){
    		   for(var i in obj){
 				  $("#province").append("<option value='"+obj[i].id+"'>"+obj[i].name+"</option>");
 			  }
    	   },
    	   dataType:"json"
    	});
    	  $("#province").change(function(){
    		  //清空缓存
    		     $("#city option:not(:first)").remove();
    	    	var cityValue=$("#province option:selected").val();
    	    	$.ajax({
    	    		url:"/showCity",
    	    		type:"post",
    	    		data:{pid:cityValue},
    	    		success:function(obj){
    	    			for(var i in obj){
    	    				$("#city").append("<option value='"+obj[i].id+"'>"+obj[i].name+"</option>");
    	    			}
    	    		},
    	    		dataType:"json"
    	    	})
    	    });
    	  $("#city").change(function(){ 
    		  //清理缓存
    	  $("#country").empty();
    		var cityPid= $("#city option:selected").val();
    		  $.ajax({
    			  url:"/showCity",
    			  data:{pid:cityPid},
    			  type:"post",
    			  success:function(obj){
    				  for(var i in obj){
  	    				$("#country").append("<option value='"+obj[i].id+"'>"+obj[i].name+"</option>");
    				  }
    			  },
    			  dataType:"json"  
    		  })
    	  });
    	  $("#country").change(function(){
    		  var countryId=$("#country option:selected").val();
    		  countryName=$("#country option:selected").text();
    		  if(countryId!=-1){
    			  $("#address").val(provinceName+cityName+countryName);
    		  }else{
    			  $("#address").val(provinceName);
    		  }
    	  })
    	  
    })

  


</script>
</head>
<body>
<input type="text" id="address">
	<select id="province">
		<option value="-1">---请选择---</option>
	</select>
	<select id="city">
		<option value="-1">---请选择---</option>
	</select>
	<select id="country">
		<option value="-1">---请选择---</option>
	</select>
</body>
</html>

控制层:

 @Autowired
  private cityService service;

  @RequestMapping("/")
  public String index() {
    return "index";
  }

  @RequestMapping("/showCity")
  @ResponseBody
  public Object showCity(String pid) {
    List<GfCityaddress> showCityByPid = service.showCityByPid(pid);
    System.out.println("-------:" + showCityByPid);
    return showCityByPid;

  }

Service逻辑层

  @Autowired
  private GfCityaddressMapper gfcityMapper;

  public List<GfCityaddress> showCityByPid(String pid) {
    System.out.println("pid:" + pid);
    GfCityaddressExample example = new GfCityaddressExample();
    example.createCriteria().andPidEqualTo(Integer.valueOf(pid));
    List<GfCityaddress> selectByExample = gfcityMapper.selectByExample(example);
    return selectByExample;
  }

sql查询:

  <select id="selectByPid" resultMap="BaseResultMap" parameterType="com.test.bean.GfCityaddressExample">
    select * from gf_cityaddress where pid=#{pid}
  
  </select>

3.效果图

在这里插入图片描述

总结:
页面加载的时候先加载pid=0的也就是省份的列表,你点击省份的时候js控制改变的时候取出来省份的id然后去加载有当前省份的pid也就是当前省份下边的市区,然后市区改变的时候取出来市区的id去加载有当前市区的pid,整个逻辑就是这样,可以看一下画的流程图。

这是我汇总的全国地址的一个sql,不是最新但是可以自测试使用

链接:https://pan.baidu.com/s/1L_s8Grcgr843VAO4SeATnA
提取码:6zrl

发布了10 篇原创文章 · 获赞 11 · 访问量 1338

猜你喜欢

转载自blog.csdn.net/weixin_44487579/article/details/104430355