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

本文介绍如何使用Ajax和Jquery配合Java数据库操作实现二级联动的下拉框。首先建立数据库及对应实体类,通过jdbc操作获取省份数据。接着在SelectedServlet中将所有省份转化为JSON返回给前端。前端页面使用jQuery的getJSON方法动态填充省份选择,省份改变时通过Ajax获取对应城市的JSON数据,实现城市下拉框的联动更新。
部署运行你感兴趣的模型镜像

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

需要两张表:

province:省份表

city: 城市表

如图:

e9f87af9614362f73ca2d49122f31d4d.png

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

1044a278f6dd2b3d8e9fcb9289313ca0.png

再然后,我们就能开始做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 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类,用于接收查询到的所有省份的信息

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对象,我们需要导入以下几个包

b1f1712a3db968520256ffdd82444a43.png

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

省份:

--请选择省份--

城市:

--请选择城市--

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

$.getJSON("SelectedServlet",function(data,textStatus){

var provinces = data;

var res = "";

for(var i =0;i

res += ""+provinces[i].place+"";

}

$("#province").append(res);

});

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

0a306dd2267ef64c96011f1060d12479.png

然后我们再来做联动,首先给下拉框添加一个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

res += ""+citys[i].place+"";

}

$("#city").append(res);

});

});

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

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),

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语句中了

效果如下:

ec6b7f926c0f83a8493cd546da457bfd.png

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

您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值