Java Web应用开发案例|使用AJAX实现省市区三级联动效果

简介: 使用AJAX实现省市区三级联动效果,即选择省后,该省下的所有市数据动态填充到下拉框中,区县数据也会根据市的变化而动态填充该市下的区县数据。

image.png

01、案例:省市区三级联动

省市区三级联动,在位置查找时非常有用,如查找景点、查找酒店等操作。

项目操作步骤如下

(1) 定义省、市、区三个实体对象。

public class Province{
private String id;
private String name;
private List < City> cityList;
}
public class City{
private String id;
private String name;
private List < Country> countryList;
}
public class Country {
private String id;
private String name;
}

(2) 新建city.jsp,显示省市区信息。

< table border ="1">
< tr >< td>省级 :</td >
<td>< select name ="shengSelect"onchange = "getShiList()";
id="shengID”onclick = getShengName()">
<option value ="nulISelect">-- 请选择--</option>
<c:forEach var ="sheng" items ="{SarrSheng}">
S{sheng.id}">
< option value =${sheng.name}
</option>
</c:forEach >
</select ></td>
< td>市级: </td>"getQvList()">
<td>< select name ="shiSelect” id="shiID"onchange< option> --请选择 --</option ></select ></td><td>区县: </td><td>< select name ="gvSelect"id ="gvID”onclick = "getQvName()">-- 请选择-- </option >< option ></select ></td>
</tr >
</table>

(3) 访问 http://localhost:8080/CityThree/, web.xml中的欢迎页指向GetShengSvl。

<welcome- file-list >
< welcome - file> GetShengSvl </welcome - file></welcome- file-list>

(4) 新建控制器GetShengSvl。

@WebServlet("/GetShengSvl"
public class GetShengSvl extends HttpServlet{
   
   

读取所有省的数据,并转向 city.jsp 。

public void doPost(HttpServletRequest request
HttpServletResponse response)
throws ServletException,IOException{
   
   
 (TestBiz testBiz = new TestBiz();
List < Province> arrSheng = testBiz.getAllSheng();
if(arrSheng != null){
   
   
request.setAttribute("arrSheng",arrSheng);
request.getRequestDispatcher("/WEB - INF/main/city.jsp”)
forward(request,response)
}

(5) 参见city.jsp,所有省的数据是使用JSTL填充的。

<c:forEach var ="sheng” items ="S(arrSheng]">
<option value ="s(sheng.id">Ssheng.name
</option>
</c:forEach >

(6) 在city.jsp页选择省的数据,会触发下拉框的onchange()事件。

function getShiList()
if($("# shengID").val() != "nullSelect"){
   
   
$ .getJSON("GetShiSvl",{
   
   sheng: ("# shengID").val()},
function callback(data)
$("# shiID").empty();
S (data).each( function(i){
   
   
S("<option value=” + datalil.id + ">"
+ data[i].name +"</option >").appendTo("# shiID");;
});
$ ("# shiID").change();  //触发#shiID的onChange 事件

else{
   
     
S ("# shiID").empty();
$ ("# qvID").empty();
$("< option >-- 请选择 -- </option >").appendTo("# shiID");
$("<option>--请选择 -- </option >").appendTo("#qvID");
}
}

(7) 新建控制器GetShiSvl,根据省的id返回该省下的所有市数据。

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
   
   
String shengID = request.getParameter("sheng”);
TestBiz testBiz = new TestBiz();
List < City> cityList = testBiz.getShiBySheng(shengID);
JSONArray jsonArray = JSONArray.fromObject(cityList);
response.setCharacterEncoding("utf - 8");
response.getWriter().print(jsonArray.toString())
}

(8) 选择市,会触发下拉框的onchange()事件。

function getOvList(){
   
   
 {
   
   mathJaxContainer[0]} ("# shiID").val(),
sheng:$("# shengID").val())function callback(data){
   
   
("# qvID").empty();
S (data).each(function(i){
   
   
$("<option value=" + datalil.id + ">"
+ data[i].name +"</option >").appendTo("# qvID");;
});
$("# qvID").click();

(9) 新建控制器GetQvSvl,根据市的id返回该市下的所有区县数据。

@WebServlet("/GetQvSvl") 
public class GetQvSvl extends HttpServlet{
   
   
public void service(HttpServletRequest request,HttpServletResponse response)
throw ServletException,IOException{
   
   
String provinceID = request.getParamenter("sheng");
String CityID = request.getParamenter("shi");
TestBiz biz = new TestBiz();
List<Country>qvList = biz.getCountrys(provinceID,CityID);
JSONArray jsonArray = JSONArray.fromObject(qvList);
response.setCharracterEncoding("UTF-8");
response.GetWriter().print(jsonArray.toString())
}
}

(10) 选择省,根据省的id返回该省下的所有市数据,JSON格式如下:

[("id":"tj01","name":"和平区"),
["id":"tj02","name":"河东区"},
["id":"tj03","name":"河西区"},
{
   
   "id":"tj04","name":"南开区"},
{
   
   "id":"tj05","name":"河北区"),
{
   
   "id":"tj06","name""红桥区"),
{
   
   "id":"tj07","name":"塘沽区"),
"id":"tj08","name":"汉沽区"),
{
   
   "id":"tj0g""name":"大港区"),
{
   
   "id":"tj10","name":"东丽区"),
"d":"tj11","name":"西青区"),
["id""tj12","name":"津南区"],
"id":"tj13","name":"北辰区"),
"d":"tj14","name":"武清区"),
"d"."tj15”"name":"宝抵区"}]

(11) 选择市,根据市的id返回的该市下的所有区县数据,JSON格式如下:

[("id":"tj16","name":"宁河县"),
"id":"tj17","name":"静海县"},
"id":"tj18","name":"蓟县"}]
目录
相关文章
|
23天前
|
Java 数据库 网络架构
菜鸟之路Day36一一Web开发综合案例(部门管理)
本文详细记录了基于Spring Boot的Web开发综合案例——部门管理功能的实现过程。从环境搭建到功能开发,涵盖数据库表设计、Spring Boot项目创建、依赖引入、配置文件设置以及Mapper、Service、Controller的基础结构构建。文章重点讲解了查询、删除、新增和修改部门信息的业务逻辑实现,遵循RESTful规范设计接口,并通过统一响应结果类`Result`优化前后端交互体验。借助Spring的IoC容器管理与MyBatis的SQL映射,实现了高效的数据操作与业务处理,最终完成部门管理的全功能开发。
72 12
|
21天前
|
XML SQL 前端开发
菜鸟之路Day37一一Web开发综合案例(员工管理)
本文介绍了基于Web开发的员工管理综合案例,涵盖分页查询、条件分页查询、删除员工和新增员工四大功能模块。通过前后端交互,前端传递参数(如页码、每页记录数、查询条件等),后端使用MyBatis与PageHelper插件处理数据查询与操作。代码结构清晰,包括Controller层接收请求、Service层业务逻辑处理以及Mapper层数据访问,并结合XML动态SQL实现灵活的条件查询。此外,新增与删除功能分别通过POST与DELETE请求完成,确保系统功能完整且高效。
65 7
|
17天前
|
存储 前端开发 Java
菜鸟之路Day38一一Web开发综合案例(三)
本文介绍了Web开发中的文件上传与员工信息修改的综合案例,涵盖前端到后端的完整流程。重点讲解了阿里云OSS的集成,包括Bucket创建、密钥获取及SDK使用,并通过Spring Boot实现文件上传功能。同时,详细描述了员工信息查询与修改的操作逻辑,涉及Controller、Service和Mapper层代码实现。最后探讨了配置文件的优化,对比@Value与@ConfigurationProperties注解,展示了如何通过实体类批量注入配置参数,提升代码可维护性与灵活性。
46 1
|
24天前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
3月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
538 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
3月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
7月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
184 63
|
7月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
273 62
|
6月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南

热门文章

最新文章