使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例


Posted in jQuery onJanuary 25, 2018

首先我们需要先建立好数据库,将一些数据插入进去

需要两张表:

province:省份表

city: 城市表

如图:

使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

然后再在java中建立相关的实体类与之对应

使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

再然后,我们就能开始做jdbc的操作了

public class ConnectionFactory { 
 private static String driver; 
 private static String url; 
 private static String user; 
 private static String password; 
 static { 
  Properties prop = new Properties(); 
  //读取文件 
   
  try { 
   InputStream in = ConnectionFactory.class.getResourceAsStream("./jdbc.properties"); 
    
   prop.load(in); 
   driver = prop.getProperty("jdbc.driver"); 
   url = prop.getProperty("jdbc.url"); 
   user = prop.getProperty("jdbc.user"); 
   password = prop.getProperty("jdbc.password"); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
   
 } 
  
 /** 
  * 获取连接对象 
  * @return 
  */ 
 public static Connection getConnection(){ 
  Connection conn = null; 
   
  try { 
   Class.forName(driver); 
   conn = DriverManager.getConnection(url, user, password); 
    
  } catch (Exception e) { 
   throw new RuntimeException(e); 
  } 
   
  return conn; 
 } 
  
 /** 
  * 关闭资源 
  * @param conn 
  * @param pstmt 
  * @param stmt 
  * @param rs 
  */ 
 public static void close(Connection conn,PreparedStatement pstmt,Statement stmt,ResultSet rs){ 
    
   try { 
    if (conn != null) { 
     conn.close(); 
    } 
     
    if (pstmt != null) { 
     pstmt.close(); 
    } 
     
    if (stmt != null) { 
     stmt.close(); 
    } 
     
    if (rs != null) { 
     rs.close(); 
    } 
   } catch (SQLException e) { 
    throw new RuntimeException(e); 
   } 
   
 }

首先我们可以在页面加载的时候获取所有省份的信息,SQL语句如下

Connection conn = null; 
 PreparedStatement pstmt = null; 
 Province province2 = null; 
  
 @Override 
 public ArrayList<Province> findAllPro() { 
  ResultSet rs = null; 
  ArrayList<Province> pros = null; 
  try { 
   String sql = "select id,place from province"; 
   conn = ConnectionFactory.getConnection(); 
   pstmt = conn.prepareStatement(sql); 
   pros = new ArrayList<Province>(); 
    
   rs = pstmt.executeQuery(); 
    
   while(rs.next()){ 
    Province province = new Province(); 
    province.setId(rs.getInt(1)); 
    province.setPlace(rs.getString(2)); 
    pros.add(province); 
   } 
    
  } catch (SQLException e) { 
   throw new RuntimeException(e); 
  } 
   
  return pros; 
 }

将查到的数据放到后台,建立一个SelectedServlet类,用于接收查询到的所有省份的信息

response.setContentType("application/json;charset=utf-8"); 
  response.setCharacterEncoding("utf-8"); 
  request.setCharacterEncoding("utf-8"); 
  //创建一个Place对象 
  ArrayList<Province> pros= new Place().findAllPro(); 
  PrintWriter out = response.getWriter(); 
  //将集合直接转换为Json对象 
  out.write(JSONArray.fromObject(pros).toString());

在这里会用到集合转换Json对象,我们需要导入以下几个包

使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

然后我们开始写前台页面:

<body> 
  省份:<select id="province"> 
   <option>--请选择省份--</option> 
  </select> 
   
  城市:<select id="city"> 
    <option>--请选择城市--</option> 
   </select> 
  <br/><br/> 
  <span></span> 
 </body>

然后jQuery代码如下:(由于我导入的jQuery版本比较低,所以使用的方法是getJSON,而不是getJson)

$.getJSON("SelectedServlet",function(data,textStatus){ 
 var provinces = data; 
      
 var res = ""; 
 for(var i =0;i<provinces.length;i++){ 
 <span style="white-space:pre"> </span>res += "<option>"+provinces[i].place+"</option>"; 
 } 
  $("#province").append(res); 
 });

这样就能在页面加载的时候获取到数据

使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

然后我们再来做联动,首先给下拉框添加一个change事件,然后获取选中的信息,将选中的信息发送到另一个CityServlet中

//下拉框改变时触发的事件 
 $("#province").change(function(){ 
 var seled = $("option:selected").html(); 
      
 $("span").html(seled); 
 $.getJSON("CityServlet",{ 
  "province":encodeURI(encodeURI(seled)) 
     },function(data){ 
  $("#city").html(""); 
  var citys = data; 
  var res = ""; 
  for(var i = 0;i<citys.length;i++){ 
   res += "<option>"+citys[i].place+"</option>"; 
  } 
  $("#city").append(res); 
 }); 
      
 });

服务器通过获得的信息通过sql语句查询出来,SQL代码如下:

public ArrayList<City> findAllCityByPro(String name) { 
  ResultSet rs = null; 
  ArrayList<City> citys = null; 
  try { 
   //通过名字获得所有值 
   String sql = "select c.city_place from city c ," 
     + "province p where c.province_id = " 
     + " (select id from province where place = '"+ name +"') " 
     + " and c.province_id = p.id"; 
   conn = ConnectionFactory.getConnection(); 
   pstmt = conn.prepareStatement(sql); 
   citys = new ArrayList<City>(); 
   System.out.println(sql); 
   rs = pstmt.executeQuery(); 
    
   while(rs.next()){ 
    City city = new City(); 
    city.setPlace(rs.getString(1)); 
    citys.add(city); 
   } 
   System.out.println(citys); 
    
  } catch (SQLException e) { 
   e.printStackTrace(); 
  } 
   
  return citys; 
 }

将查询到的数据发送到后台,后台接收到数据后将其转换为Json对象,并通过回调函数发送到前台,然后前台就可以通过事件直接获取到数据,而不用各种跳转页面,这就是Ajax(Asynchronous Javascript And XML),

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException { 
  response.setContentType("application/json;charset=utf-8"); 
  response.setCharacterEncoding("utf-8"); 
  request.setCharacterEncoding("utf-8"); 
//  String proName = "浙江"; 
  String proName = URLDecoder.decode(URLDecoder.decode(request.getParameter("province"), "utf-8"), 
    "utf-8"); 
  ArrayList<City> citys= new Place().findAllCityByPro(proName); 
  PrintWriter out = response.getWriter(); 
  out.write(JSONArray.fromObject(citys).toString()); 
   
 }

至于显示页面的代码也在前面写到jQuery语句中了

效果如下:

使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

以上这篇使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
May 05 jQuery
使用 jQuery 实现表单验证功能
Jul 05 jQuery
jQuery EasyUI的TreeGrid查询功能实现方法
Aug 08 jQuery
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
基于jQuery实现的设置文本区域的光标位置
Jun 15 jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
JQuery属性操作与循环用法示例
May 15 jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
Aug 27 jQuery
jQuery实现弹幕特效
Nov 29 jQuery
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
解决Jquery下拉框数据动态获取的问题
Jan 25 #jQuery
jquery 获取索引值在一定范围的列表方法
Jan 25 #jQuery
jquery 输入框查找关键字并提亮颜色的实例代码
Jan 23 #jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 #jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 #jQuery
浅谈ajax在jquery中的请求和servlet中的响应
Jan 22 #jQuery
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 #jQuery
You might like
php下使用无限生命期Session的方法
2007/03/16 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
javascript 写类方式之十
2009/07/05 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
jquery获取transform里的值实现方法
2017/12/12 jQuery
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
低版本中Python除法运算小技巧
2015/04/05 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
实用自动化运维Python脚本分享
2018/06/04 Python
Python3中详解fabfile的编写
2018/06/24 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
英语师范专业毕业生自荐信
2013/09/21 职场文书
机械设计职业生涯规划书
2013/12/27 职场文书
创业者迈进成功第一步:如何写创业计划书?
2014/03/22 职场文书
100句拼搏进取的名言警句,值得一读!
2019/10/07 职场文书
Django显示可视化图表的实践
2021/05/10 Python
python非标准时间的转换
2021/07/25 Python
Java spring定时任务详解
2021/10/05 Java/Android