ajax省市区三级联动
jdbc+servlet+ajax开发省市区三级联动
技术点:jdbc操作数据库,ajax提交,字符拦截器,三级联动
特点:局部刷新达到省市区三级联动,举一反三可以做商品分类等
宗旨:从实战中学习
博客讲解是按照两级联动,但下载的资源是三级联动含sql文件。
效果图:

首页核心代码:
- <%
- List<HashMap<String,Object>> maps = ConnectionUtil.findProvinces();
- pageContext.setAttribute("provinces", maps);
- %>
- <fieldset>
- <legend>省市区三级联动</legend>
- 省份:
- <select id="province" onchange="select_citys(this)">
- <option value="">-请选择-</option>
- <!-- 循环显示所有省份 -->
- <c:forEach var="pv" items="${provinces}">
- <option value="${pv.id}">${pv.name}</option>
- </c:forEach>
- </select>
- 城市:
- <select id="city" onchange="select_areas(this)">
- <option value="">-请选择-</option>
- </select>
- 区域:
- <select id="area">
- <option value="">-请选择-</option>
- </select>
- </fieldset>
ajax代码:
- function select_citys(obj){
- var provinceId = $(obj).val();
- if(!provinceId)return; // 声明变量就要判断是否为null
- $.ajax({
- type:"post",//请求方式get/post
- url:"${ctx}/CityServlet",//请求对应的地址
- data:{"provinceId":provinceId},//往服务器传递的参数,
- success:function(data){//服务器交互成功调用的回调函数,data就是服务器端传递出来的数据
- var jdata = data.trim(); // 去前后空格
- if(jdata=="fail"){
- alert("查询失败!");
- }else{
- var jsonData = eval(jdata);//将字符串的json对象转换成json
- $("#area").html("<option>-请选择-</option>");
- append_template(jsonData,"city");
- }
- }
- });
- };
后台处理核心代码:
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- PrintWriter out=response.getWriter();
- // 获取ajax请求发送过来的省份id参数
- String pid = request.getParameter("provinceId");
- if (pid != null && !pid.equals("")) {// 有变量就要进行空判断
- int provinceId = Integer.parseInt(pid);// 因为前端都是传String;所以要转换
- List<HashMap<String, Object>> citys = ConnectionUtil
- .findCitys(provinceId);
- try {
- // 将集合对象转换成json格式---List---JsonArr字符串[{},{},{}]
- out.print(JSONUtil.serialize(citys));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- } else {
- // 查询失败
- out.print("fail");
- }
- }
数据库操作:
- package com.ajax.connection;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- /**
- * 数据库链接,查询类
- * 对jdbc操作数据库不懂的可以参考:http://blog.csdn.net/qq_19558705/article/details/49947317
- * 以下内容就不做过多的注释了
- * 实际业务会采用连接池的方式,这只做学习使用
- * @author Administrator
- *
- */
- public class ConnectionUtil {
- private static String url = "jdbc:mysql:///test";
- private static String username = "root";
- private static String password = "root";
- public static Connection getConnection(){
- Connection connection = null;
- try{
- Class.forName("com.mysql.jdbc.Driver");
- connection = DriverManager.getConnection(url,username,password);
- return connection;
- }catch(Exception ex){
- return null;
- }
- }
- public static List<HashMap<String, Object>> findProvinces(){
- Connection connection = null;
- Statement statement = null;
- ResultSet rs = null;
- List<HashMap<String, Object>> maps = null;
- try{
- String sql = "SELECT id,name FROM tm_province order by sort asc";
- connection = getConnection();
- statement = connection.createStatement();
- rs = statement.executeQuery(sql);
- maps = new ArrayList<HashMap<String,Object>>();
- HashMap<String, Object> map = null;
- while(rs.next()){
- map = new HashMap<String, Object>();
- map.put("id", rs.getInt("id"));
- map.put("name", rs.getString("name"));
- maps.add(map);
- }
- return maps;
- }catch(SQLException sql){
- sql.printStackTrace();
- return null;
- }finally{
- try{
- if(rs!=null)rs.close();
- if(statement!=null)statement.close();
- if(connection!=null)connection.close();
- }catch(SQLException sql){
- sql.printStackTrace();
- }
- }
- }
- //后面内容省略,可以免费下载资源
- }
字符拦截器:
- package com.ajax.filter;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * 如果不清楚字符拦截器可以参考:http://blog.csdn.net/qq_19558705/article/details/49962153
- * @author Administrator
- *
- */
- public class CharacterFilter implements Filter {
- private FilterConfig config;
- public void doFilter(ServletRequest req, ServletResponse resp,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- HttpServletResponse response = (HttpServletResponse) resp;
- // 从web.xml文件中获取encoding对应的init-param中的param-value
- String encoding = config.getInitParameter("encoding");
- // 只要定义了变量;就要判断是否为空;不然会报空指针异常
- if (encoding != null) {
- // 指明内容请求格式的字符编码集
- response.setContentType("text/html ;charset=" + encoding);
- // 请求时规范字符编码格式
- request.setCharacterEncoding(encoding);
- // 指明输出的格式字符编码集
- response.setCharacterEncoding(encoding);
- }
- // 进入下一个拦截器
- chain.doFilter(request, response);
- }
- // FilterConfig 是拦截器的全局变量
- public void init(FilterConfig config) throws ServletException {
- this.config = config;
- }
- public void destroy() {
- }
- }
ajax省市区三级联动的更多相关文章
- JQ与AJAX 省市区三级联动下拉框
用于初学者学习基本的联动下拉框,废话不多说,见代码 首先看控制器里的3个下拉框对应代码: public ActionResult GetProvinceList() { ProvinceReposit ...
- 基于ThinkPHP+AJAX的省市区三级联动
练习,就当练习. 省市区三级联动,样式如下图所示: 1,导入两个js文件并且导入数据库文件. 两个js文件分别是jquery-2.1.4.min.js和jquery-1.js,数据库文件,见附件. 2 ...
- Ajax来实现下拉框省市区三级联动效果(服务端基于express)
//服务端JS代码: //提供服务端的处理 const express = require('express'); const fs = require('fs'); const app = expr ...
- 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下 ...
- 基于thinkphp和ajax的省市区三级联动
练习,就当练习. 省市区三级联动,样式如下图所示: 1,导入两个js文件并且导入数据库文件. 两个js文件分别是jquery-2.1.4.min.js和jquery-1.js,数据库文件,见附件. 2 ...
- 第117天:Ajax实现省市区三级联动
Ajax实现省市区三级联动 思路: (1)首先获取省份信息 (2)发起Ajax请求,注意dataType中的T大写 (3)封装回调函数,回调函数success中用$.each循环每一条数据,动态创建o ...
- JS省市区三级联动
不需要访问后台服务器端,不使用Ajax,无刷新,纯JS实现的省市区三级联动. 当省市区数据变动是只需调正js即可. 使用方法: <!DOCTYPE html><html>< ...
- 省市区三级联动(二)JS部分简单版
通过对上一篇<省市区三级联动>的学习发现JScript部分省市区的填充代码几乎相同,所以可以写成一个函数. 注意:html部分和chuli.php部分不变 1.下拉列表填充可以写成带参数的 ...
- ajax 实现三级联动
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...
随机推荐
- 十三、File Translator怎么写
---恢复内容开始--- 1. File Translator可以将信息从maya中导入和导出. 2. 创建一个file translator需要从MPxFileTranslator继承. 3. 函数 ...
- Java class file format specfication
Java class file format spec Link: https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html Her ...
- Dynamics AX Hostory
现在谈起Dynamics AX,在微软Dynamics系列产品当中,作为最受瞩目和最有前景的Dynamics套装产品线,很多人也许只知道它曾经由于资本市场的上市和并购,前后经历了三个“东家”.对于它长 ...
- Apache 日志管理,获取客户端端口号
日志管理分类 日志文件是用户管理和监控 Apache 安全的非常好的第一手资料,它清晰地记录了客户端访问 Apache 服务器资源的每一条记录,以及在访问中出现的错误信息,可以这样说,Apache 可 ...
- eaby技术架构变迁
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 最近在infoq上面看到 ebay介绍其系统架构变迁以及系统设计分享方面的讲座,其中 ...
- 带有静态方法的类(java中的math类)
带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...
- syntax error near unexpected token `then'问题的解决
#!/bin/bash #if program test echo 'a:' read a if [ "$a" = "English" ];then ...
- Leetcode2:Add Two Numbers@Python
You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...
- Windows内核原理系列01 - 基本概念
1.Windows API Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中. 2.关于.NET .NET由一个被称为FCL的类库 ...
- Unity中获取物体的子物体
如果想获取一级子节点 foreach (Transform child in this.transform) { Debug.Log(child.name); } 如果想获取所有子节点 foreach ...