使用Ajax和Jquery配合數(shù)據(jù)庫(kù)實(shí)現(xiàn)下拉框的二級(jí)聯(lián)動(dòng)的示例
首先我們需要先建立好數(shù)據(jù)庫(kù),將一些數(shù)據(jù)插入進(jìn)去
需要兩張表:
province:省份表
city: 城市表
如圖:
然后再在java中建立相關(guān)的實(shí)體類與之對(duì)應(yīng)
再然后,我們就能開始做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(); } } /** * 獲取連接對(duì)象 * @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; } /** * 關(guān)閉資源 * @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); } }
首先我們可以在頁(yè)面加載的時(shí)候獲取所有省份的信息,SQL語(yǔ)句如下
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; }
將查到的數(shù)據(jù)放到后臺(tái),建立一個(gè)SelectedServlet類,用于接收查詢到的所有省份的信息
response.setContentType("application/json;charset=utf-8"); response.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8"); //創(chuàng)建一個(gè)Place對(duì)象 ArrayList<Province> pros= new Place().findAllPro(); PrintWriter out = response.getWriter(); //將集合直接轉(zhuǎn)換為Json對(duì)象 out.write(JSONArray.fromObject(pros).toString());
在這里會(huì)用到集合轉(zhuǎn)換Json對(duì)象,我們需要導(dǎo)入以下幾個(gè)包
然后我們開始寫前臺(tái)頁(yè)面:
<body> 省份:<select id="province"> <option>--請(qǐng)選擇省份--</option> </select> 城市:<select id="city"> <option>--請(qǐng)選擇城市--</option> </select> <br/><br/> <span></span> </body>
然后jQuery代碼如下:(由于我導(dǎo)入的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); });
這樣就能在頁(yè)面加載的時(shí)候獲取到數(shù)據(jù)
然后我們?cè)賮?lái)做聯(lián)動(dòng),首先給下拉框添加一個(gè)change事件,然后獲取選中的信息,將選中的信息發(fā)送到另一個(gè)CityServlet中
//下拉框改變時(shí)觸發(fā)的事件 $("#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); }); });
服務(wù)器通過獲得的信息通過sql語(yǔ)句查詢出來(lái),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; }
將查詢到的數(shù)據(jù)發(fā)送到后臺(tái),后臺(tái)接收到數(shù)據(jù)后將其轉(zhuǎn)換為Json對(duì)象,并通過回調(diào)函數(shù)發(fā)送到前臺(tái),然后前臺(tái)就可以通過事件直接獲取到數(shù)據(jù),而不用各種跳轉(zhuǎn)頁(yè)面,這就是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()); }
至于顯示頁(yè)面的代碼也在前面寫到j(luò)Query語(yǔ)句中了
效果如下:
以上這篇使用Ajax和Jquery配合數(shù)據(jù)庫(kù)實(shí)現(xiàn)下拉框的二級(jí)聯(lián)動(dòng)的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- jquery基于layui實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)下拉選擇(省份城市選擇)
- 基于jquery實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果
- 幾種二級(jí)聯(lián)動(dòng)案例(jQuery\Array\Ajax php)
- jQuery+JSON實(shí)現(xiàn)AJAX二級(jí)聯(lián)動(dòng)實(shí)例分析
- jquery實(shí)現(xiàn)二級(jí)導(dǎo)航下拉菜單效果
- jquery實(shí)現(xiàn)簡(jiǎn)單的二級(jí)導(dǎo)航下拉菜單效果
- jQuery實(shí)現(xiàn)帶延遲的二級(jí)tab切換下拉列表效果
- jQuery實(shí)現(xiàn)可高亮顯示的二級(jí)CSS菜單效果
- 如何使用Jquery動(dòng)態(tài)生成二級(jí)選項(xiàng)列表
相關(guān)文章
jquery ready()的幾種實(shí)現(xiàn)方法小結(jié)
下面是目前本人知道的幾種jQuery的ready ()的寫法.如果還有其他的寫法,望告知2010-06-06jQuery中triggerHandler()方法用法實(shí)例
這篇文章主要介紹了jQuery中triggerHandler()方法用法,實(shí)例分析了triggerHandler()方法的功能、定義及觸發(fā)被選元素的指定事件類型的使用技巧,需要的朋友可以參考下2015-01-01ASP.NET MVC中EasyUI的datagrid跨域調(diào)用實(shí)現(xiàn)代碼
因?yàn)閑asyUI使用的是JQuery的異步方法加載數(shù)據(jù),應(yīng)該遵循JQuery的跨域訪問規(guī)則2012-03-03js判斷復(fù)選框是否選中的方法示例【基于jQuery】
這篇文章主要介紹了js判斷復(fù)選框是否選中的方法,結(jié)合實(shí)例形式分析了基于jQuery實(shí)現(xiàn)的復(fù)選框選中判斷相關(guān)操作技巧,需要的朋友可以參考下2019-10-10jquery中ajax使用error調(diào)試錯(cuò)誤的方法
這篇文章主要介紹了jquery中ajax使用error調(diào)試錯(cuò)誤的方法,實(shí)例分析了Ajax的使用方法與error函數(shù)調(diào)試錯(cuò)誤的技巧,需要的朋友可以參考下2015-02-02jQuery關(guān)于導(dǎo)航條背景切換效果實(shí)現(xiàn)示例
導(dǎo)航條背景切換的效果,想必大家在瀏覽網(wǎng)頁(yè)時(shí)可能會(huì)碰到過,下面為大家介紹下使用jquery如何實(shí)現(xiàn),具體思路及代碼如下,感興趣的朋友可以參考下2013-09-09基于JQuery實(shí)現(xiàn)的跑馬燈效果(文字無(wú)縫向上翻動(dòng))
本篇文章分享了如何實(shí)現(xiàn)文字無(wú)縫向上翻動(dòng)效果的示例代碼。代碼清晰明了,可直接下載使用。有興趣的朋友可以看下2016-12-12