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表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...
随机推荐
- 如何保护.net中的dll文件(防破解、反编译)
如何保护.net中的dll文件(防破解.反编译) 2010-07-19 15:08 [小 大] 来源: 赛迪网 评论: 0 分享至: 百度权重查询 词库网 网站监控 服务器监控 SEO监控 ...
- java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~
在工作开发过程中,每次用SVN提交代码全选择的时候,发现会产生很多不需要的文件后缀垃圾文件,感觉挺烦人的,一个一个删太麻烦了,如果产生多种后缀文件时,那删起来多费劲,是吧?想想,就写了一段程序通过递归 ...
- 在osx下通过vmware无GUI方式运行centos 7
启动虚拟机: /Applications/VMware\ Fusion.app/Contents/Library/vmrun -T fusion start "CentOS 64-bit.v ...
- 关于移动端常用的盒模型与flex布局
在移动端选择布局的方式中常用盒模型display:-webkit-box达到自适应,然而display:-webkit-flex也同样能达到效果,因自在己移动端用-webkit-box比felx方式熟 ...
- VS2008下,aspx页面设计模式消失,只有黑白字体
版权声明:本文为博主原创文章,未经博主允许不得转载. RT,在工具选项里面重新设定的时候,报错,说一部分文件无法安装. 寻找一晚上,终于有了解决方案,供以后参考. luanwey(大陆响尾蛇)(不做温 ...
- Ubuntu 12.04搭建l2tp服务器记录。
1. 安装openswan apt-get install openswan 2.打开 /etc/ipsec.conf 文件,做如下配置: 其中,virtual_privat这里包含的网络地址允许配置 ...
- [C]遍历目录下所有文件
#include<iostream>#include<string.h>#include<io.h>FILE *fp;using namespace std;voi ...
- 第六百零七八天 how can I 坚持
昨天去跟着谈了个项目,涨了些见识吧,关注下客户关注的,多考虑些,昨天谈完就下班,陪着sy去了趟西单换电池,苹果的售后也真是挺垃圾的. 今天本来是要搭搭环境的,结果代码没搞来,明天去客户那边搞代码,感觉 ...
- win10 剪贴板 拒绝访问
win10 Cannot open clipboard:拒绝访问.
- 43、哈工大NLP自然语言处理,LTP4j的测试+还是测试
1.首先需要构建自然语言处理的LTP的框架 (1)需要下载LTP的源码包即c++程序(https://github.com/HIT-SCIR/ltp)下载完解压缩之后的文件为ltp-master (2 ...