• AJAX 三级联动例题


    用ajax三级联动写一个关于省市区下拉列表的联动

    数据库中的表:

    id是这条数据的主键,dname是地区名称,parentid是父级id

    页面效果:

    先实例化一个district类

    package com.hanqi.model;
    
    public class District {
    	private String id;
    	private String dname;
    	private String parentid;
    	public District(String id, String dname, String parentid) {
    		super();
    		this.id = id;
    		this.dname = dname;
    		this.parentid = parentid;
    	}
    	public District() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public String getId() {
    		return id;
    	}
    	public void setId(String id) {
    		this.id = id;
    	}
    	public String getDname() {
    		return dname;
    	}
    	public void setDname(String dname) {
    		this.dname = dname;
    	}
    	public String getParentid() {
    		return parentid;
    	}
    	public void setParentid(String parentid) {
    		this.parentid = parentid;
    	}
    }
    

     连接数据库:

    package com.hanqi.util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    
    public class DBHelper {
    	private static final String USERNAME = "test0315";
    	private static final String PASSWORD = "123456";
    	private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
    	private static final String CLASSNAME = "oracle.jdbc.OracleDriver";
    	static {
    		try {
    			Class.forName(CLASSNAME);
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static Connection getConnection() {
    		Connection conn = null;
    		try {
    			conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return conn;
    	}
    
    	public static void destroy(Connection conn,PreparedStatement ps,ResultSet rs) {
    		if(rs != null) {
    			try {
    				rs.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			rs = null;
    		}
    		if(conn != null) {
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			conn = null;
    		}
    		if(ps != null) {
    			try {
    				ps.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			ps = null;
    		}
    	}
    	public static void main(String[] args) {
    		System.out.println(getConnection());
    	}
    }
    

     数据库访问对象:

    package com.hanqi.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.security.auth.Destroyable;
    
    import com.hanqi.model.District;
    import com.hanqi.util.DBHelper;
    
    public class Basedao {
    	private Connection conn;
    	private PreparedStatement ps;
    	private ResultSet rs;
    
    	private ResultSet initQuery(String sql, Object... objects) throws SQLException {
    		conn = DBHelper.getConnection();
    		ps = conn.prepareStatement(sql);
    		setParam(ps, objects);
    		return ps.executeQuery();
    	}
    
    	private void setParam(PreparedStatement ps, Object[] objects) throws SQLException {
    		int i = 1;
    		for (Object o : objects) {
    			ps.setObject(i, o);
    			i++;
    		}
    	}
    
    	public List<District> selectdistrict(String parentid) throws SQLException {
    		List<District> list = new ArrayList<>();
    		String sql = "select * from c_district where parentid = ?";
    		rs = initQuery(sql, parentid);
    		while (rs.next()) {
    			District dt = new District();
    			dt.setId(rs.getString("id"));
    			dt.setDname(rs.getString("dname"));
    			dt.setParentid(rs.getString("parentid"));
    			list.add(dt);
    		}
    		DBHelper.destroy(conn, ps, rs);
    		return list;
    	}
    }
    

     servlet类:

    package com.hanqi.servlet;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.alibaba.fastjson.JSONObject;
    import com.hanqi.dao.Basedao;
    import com.hanqi.model.District;
    
    /**
     * Servlet implementation class FindServlet
     */
    @WebServlet("/FindServlet")
    public class FindServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	public FindServlet() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		String parentid = request.getParameter("parentid");
    		request.setCharacterEncoding("utf-8");
    		response.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset:utf-8");
    		Basedao bd = new Basedao();
    		JSONObject jo = new JSONObject();
    		List<District> list = null;
    		try {
    			list = bd.selectdistrict(parentid);
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		if (list != null && list.size() > 0) {
    			jo.put("success", true);
    			jo.put("result", list);
    		} else {
    			jo.put("seccess", false);
    		}
    		response.getWriter().write(jo.toJSONString());
    	}
    
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doGet(request, response);
    	}
    }
    

     JSP页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <title>Insert title here</title>
    </head>
    <body>
     省:<select id="province">
     	<option>===请选择===</option>
     </select>
     市:<select id="city">
     	<option>===请选择===</option>
     </select>
     区:<select id="area">
     	<option>===请选择===</option>
     </select>
    </body>
    </html>
    

     JS页面:

    $(function() {//$() 此方法代表当JSP页面元素全部加载完成后再执行JS脚本
    	$.ajax({//ajax方法调用,通过此方法接收前端信息发往后台并接受后台信息显示在前端
    		type : "post",//发送请求的方式:post/get
    		url : "FindServlet",//接收请求的地址
    		dataType : "json",//接收后台数据的类型:text,html,json,xml
    		data:{//这个ajax请求所携带的参数,是指前端的数据请求,以键值对方式存储,为可选项;
    			parentid:"0"
    		},
    		success : function(data) {//当这个请求成功发送到后台时执行的方法,这里的data参数是指后台响应后发送来的字符串类型的数据;
    			if (data.success) {//
    				for (var i = 0; i < data.result.length; i++) {
    					var district = data.result[i];//将数据里的对象遍历取出
    					$("#province").append(//添加下拉选项
    							"<option value='" + district.id + "'>"//将id作为选项的值
    									+ district.dname + "</option>");
    				}
    			}
    		},
    		error : function(msg) {//请求失败时执行的方法;
    
    		}
    	});
    	$("#province").change(//当该选择器改变时执行该方法
    			function() {//封装一个方法
    				var provinceid = $(this).val();//获取该选项的值作为请求参数,this代表这个选择器;
    				$.ajax({
    					type : "post",
    					url : "FindServlet",
    					data : {
    						parentid : provinceid
    					},
    					dataType : "json",
    					success : function(data) {
    						if (data.success) {
    							$("#city").empty();//先将次级选项初始化,再添加下拉数据
    							$("#city").append("<option>==请选择==</option>");
    							$("#area").empty();
    							$("#area").append("<option>===请选择===</option>");
    							for (var i = 0; i < data.result.length; i++) {
    								var district = data.result[i];
    								$("#city").append(
    										"<option value='" + district.id + "'>"
    												+ district.dname + "</option>");
    							}
    						} else {//如果查询不到数据也要对选项初始化,即清空
    							$("#city").empty();
    							$("#city").append("<option>==请选择==</option>");
    							$("#area").empty();
    							$("#area").append("<option>===请选择===</option>");
    						}
    					},
    					error : function() {
    
    					}
    				});
    			});
    	
    	$("#city").change(
    		function(){
    			var cityid = $(this).val();
    			$.ajax({
    				type :"post",
    				url:"FindServlet",
    				data:{
    					parentid:cityid
    				},
    				dataType:"json",
    				success:function(data){
    					if(data.success){
    						$("#area").empty();
    						$("#area").append("<option>===请选择===</option>");
    						for(var i = 0;i<data.result.length;i++){
    							var district = data.result[i];
    							$("#area").append
    							("<option value='"+ district.id+"' >"+district.dname+"</option>")
    						}
    						
    					}else{
    						$("#area").empty();
    						$("#area").append("<option>===请选择===</option>");
    					}
    				},
    				error:function(msg){
    					alert("查询错误!");
    				}
    			});
    		}
    	);
    
    });
    

     JS页面第二种写法:

    $(function() {
    	getData("0", "#province");//调用方法,将参数传进去
    	$("#province").change(function() {
    		var provinceid = $(this).val();
    		getData(provinceid, "#city");
    	});
    	$("#city").change(function() {
    		var cityid = $(this).val();
    		getData(cityid, "#area");
    	});
    
    })
    var getData = function(parentid, selector) {//将方法命名
    	$.ajax({
    		type : "post",
    		url : "FindServlet",
    		data : {
    			parentid : parentid
    		},
    		dataType : "json",
    		success : function(data) {
    			if (data.success) {
    				$(selector).empty();
    				$(selector).append("<option>===请选择===</option>");
    				$(selector + "select").empty();//获取该选择器后面紧挨的选择器,并清空
    				$(selector + "select").append("<option>===请选择===</option>");
    				for (var i = 0; i < data.result.length; i++) {
    					var district = data.result[i];
    					$(selector).append(
    							"<option value='" + district.id + "'>"
    									+ district.dname + "</option>");
    				};			
    			}else{
    				$(selector).empty();
    				$(selector).append("<option>===请选择===</option>");
    				$(selector + "select").empty();
    				$(selector + "select").append("<option>===请选择===</option>");
    			}		
    			
    		},
    		error : function(msg) {
    			alert("查询失败!")
    		}
    	});
    }
    
  • 相关阅读:
    Kotlin扩展深入解析及注意事项和可见性
    Kotlin属性揭秘与延迟初始化特性
    Kotlin伴生对象及其字节码内幕详解
    Kotlin继承与重写重要特性剖析
    Kotlin构造方法详解与初始化过程分析
    Range与面向对象的Kotlin
    Kotlin编译器优化与when关键字详解
    Kotlin基础特性深入讲解
    java读取mysql表的注释及字段注释
    mysql导入导出sql文件
  • 原文地址:https://www.cnblogs.com/wyc1991/p/9164980.html
Copyright © 2020-2023  润新知