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

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

需要两张表:

province:省份表

city: 城市表

如图:

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

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

rush:xhtml;"> 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语句如下

rush:xhtml;"> Connection conn = null; PreparedStatement pstmt = null; Province province2 = null;

@Override
public ArrayList findAllPro() {
ResultSet rs = null;
ArrayList pros = null;
try {
String sql = "select id,place from province";
conn = ConnectionFactory.getConnection();
pstmt = conn.prepareStatement(sql);
pros = new ArrayList();

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类,用于接收查询到的所有省份的信息

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

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

然后我们开始写前台页面

rush:xhtml;"> 省份:

城市:<select id="city">



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

rush:xhtml;"> $.getJSON("SelectedServlet",function(data,textStatus){ var provinces = data;

var res = "";
for(var i =0;i<provinces.length;i++){
<span style="white-space:pre"> res += "";
}
$("#province").append(res);
});

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

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

rush:xhtml;"> //下拉框改变时触发的事件 $("#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 += "";
}
$("#city").append(res);
});

});

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

rush:xhtml;"> public ArrayList findAllCityByPro(String name) { ResultSet rs = null; ArrayList 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(); 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),

rush:xhtml;"> 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 citys= new Place().findAllCityByPro(proName); PrintWriter out = response.getWriter(); out.write(JSONArray.fromObject(citys).toString());

}

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

效果如下:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jQuery表单验证提交:前台验证一(图文+视频)
jQuery表单验证提交:前台验证二(图文+视频)
jQuery如何实时监听获取input输入框的值
JQuery怎么判断元素是否存在
jQuery如何实现定时重定向
jquery如何获取复选框选中的值
jQuery如何清空form表单数据
jQuery怎么删除元素节点
JQuery怎么循环输出数组元素
jquery怎么实现点击刷新当前页面
怎么用jquery实现文字左右展开收缩效果
jquery怎么删除html属性
如何用jquery实现图片翻转效果
jquery怎么删除样式属性
jquery如何获取当前元素的位置
如何用jquery实现点击展开收缩效果
jquery怎么实现点击隐藏显示效果
jQuery如何获取当前页面url
jQuery怎么获取鼠标的位置坐标
简洁易懂的jQuery:HTML表单与jQuery