Ajax三级联动下拉选择省市区
来源:互联网 发布:如何玩转linux 编辑:程序博客网 时间:2024/05/21 09:14
下拉列表省市区的联动选择:
先看效果:
本次所用数据库sql文件以及java源码可从本人网盘下载:
http://pan.baidu.com/s/1jIdV7r4
提示:使用可视化工具导入ChinaStates数据表,这张表导入时可能需要较长的时间。
ChinaStates表中包含省名称信息、所对应的市名称信息、以及区县信息
数据层代码:
public class ChinaDao {public ResultSet chinaList(Connection con)throws Exception{String sql="SELECT AreaCode,AreaName,ParentAreaCode FROM ChinaStates WHERE ParentAreaCode=0001";PreparedStatement pstmt=con.prepareStatement(sql);ResultSet rs=pstmt.executeQuery();return rs;}public ResultSet cityList(Connection con,String provinceValue)throws Exception{String sql="SELECT AreaCode,AreaName,ParentAreaCode FROM ChinaStates WHERE ParentAreaCode=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1, provinceValue);System.out.println(provinceValue);ResultSet rs=pstmt.executeQuery();return rs;}}
数据库取出数据转化为Json数据,再打到前台。
使用一个JsonUtil工具类和ResponseUtil工具类
后端Servlet代码
package com.zhiqi.web;import java.io.IOException;import java.sql.Connection;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.zhiqi.dao.ChinaDao;import com.zhiqi.util.DbUtil;import com.zhiqi.util.JsonUtil;import com.zhiqi.util.ResponseUtil;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class LinkageSelectServlet extends HttpServlet {/** * */private static final long serialVersionUID = 1L;DbUtil dbUtil=new DbUtil();ChinaDao chinaDao=new ChinaDao();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");String action=req.getParameter("action");if("provinceSelect".equals(action)){provinceSelect(req,resp);}else if("citySelect".equals(action)){citySelect(req,resp);}else if("countySelect".equals(action)){countySelect(req,resp);}}private void provinceSelect(HttpServletRequest req, HttpServletResponse resp) throws IOException{Connection con=null;try{con=dbUtil.getCon();JSONObject result=new JSONObject();JSONArray jsonArray=JsonUtil.formatRsToJsonArray(chinaDao.chinaList(con));result.put("provinceRows", jsonArray);ResponseUtil.write(resp, result);}catch(Exception e){e.printStackTrace();}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void citySelect(HttpServletRequest req, HttpServletResponse resp) throws IOException{String provinceValue=req.getParameter("provinceValue");Connection con=null;try{con=dbUtil.getCon();JSONObject result=new JSONObject();JSONArray jsonArray=JsonUtil.formatRsToJsonArray(chinaDao.cityList(con,provinceValue));result.put("cityRows", jsonArray);ResponseUtil.write(resp, result);}catch(Exception e){e.printStackTrace();}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void countySelect(HttpServletRequest req, HttpServletResponse resp) throws IOException{String cityValue=req.getParameter("cityValue");Connection con=null;try{con=dbUtil.getCon();JSONObject result=new JSONObject();JSONArray jsonArray=JsonUtil.formatRsToJsonArray(chinaDao.cityList(con,cityValue));result.put("countyRows", jsonArray);ResponseUtil.write(resp, result);}catch(Exception e){e.printStackTrace();}finally{try {dbUtil.closeCon(con);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
前台显示层的jsp代码:
用js操作DOM来进行动态的显示
<%@ 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">function provinceInit(){var xmlHttp=new XMLHttpRequest();var province=document.getElementById("province");xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//alert(xmlHttp.responseText);var dataObj=eval("("+xmlHttp.responseText+")");var a=dataObj.provinceRows;for(var i=0;i<a.length;i++){province.innerHTML+="<option value='"+a[i].AreaCode+"'>"+a[i].AreaName"</option>";}/*for(var i=0;i<a.length;i++){var obj=a[i];province.options.add(new Option(obj.areaName));}*/}};xmlHttp.open("get", "testJson?action=provinceSelect", true);xmlHttp.send();}function provinceSelect() {var xmlHttp=new XMLHttpRequest();var provinceValue=document.getElementById("province").value;var city=document.getElementById("city");city.options.length=0;//删除所有下拉框的选项,即重置city.innerHTML="";xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//alert(xmlHttp.responseText);var dataObj=eval("("+xmlHttp.responseText+")");var a=dataObj.cityRows;for(var i=0;i<a.length;i++){var obj=a[i];city.options.add(new Option(obj.AreaName,obj.AreaCode));}}};xmlHttp.open("get", "testJson?action=citySelect&provinceValue="+provinceValue, true);xmlHttp.send();}function citySelect() {var xmlHttp=new XMLHttpRequest();var cityValue=document.getElementById("city").value;var county=document.getElementById("county");county.options.length=0;//删除所有下拉框的选项,即重置county.innerHTML="";xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//alert(xmlHttp.responseText);var dataObj=eval("("+xmlHttp.responseText+")");var a=dataObj.countyRows;for(var i=0;i<a.length;i++){var obj=a[i];county.options.add(new Option(obj.AreaName,obj.AreaCode));}}};xmlHttp.open("get", "testJson?action=countySelect&cityValue="+cityValue, true);xmlHttp.send();}</script><title>二级联动</title></head><body>请选择地区:<select id="province" onchange="provinceSelect()"><option value="-1">请选择</option></select><select id="city" onchange="citySelect()"><option value="-1">请选择</option></select><select id="county"><option value="-1">请选择</option></select></body><script type="text/javascript">provinceInit();</script></html>
阿贾克斯Ajax
的一般形式:
function provinceInit(){var xmlHttp=new XMLHttpRequest();var province=document.getElementById("province");xmlHttp.onreadystatechange=function(){if(xmlHttp.readyState==4 && xmlHttp.status==200){//alert(xmlHttp.responseText);var dataObj=eval("("+xmlHttp.responseText+")");}};xmlHttp.open("get", "testJson?action=provinceSelect", true);xmlHttp.send();}
主要是XMLHttpRequest对象
open是请求参数有 方式,url,是否异步
send为发送,此处不设参数
考虑浏览器的兼容性,兼容IE
可以加入
var xmlHttp; if(window.XMLHttpRequest){ xmlHttp=new XMLHttpRequest(); }else{//IE 5,6的支持 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
eval("("+xmlHttp.responseText+")");此处eval()函数可以使后台传来的json数据转化为dataObject
重点掌握Ajax异步刷新
0 0
- Ajax三级联动下拉选择省市区
- AJAX版省市区三级联动下拉框
- ajax省市区三级联动
- ajax省市区三级联动
- AJAX省市区三级联动下拉列表实现 JAVA开发
- AJAX省市区三级联动下拉列表实现 JAVA开发
- 三级联动 省市区下拉列表
- 【JS插件】下拉框通用三级联动选择 省市区三级联动选择
- android 省市区选择三级联动
- 四个下拉框联动 省市区法院选择 js + ajax
- ajax开发:ajax三级省市区联动
- jsp+jquery实现省市区三级联动下拉
- JSP省市区三级联动下拉选
- Android省市区三级联动滚轮选择
- 【Axure】省市区列表三级选择联动
- vue仿京东省市区三级联动选择组件
- 使用ajax写的省市区三级联动
- jquery省市区三级联动插件,无ajax
- noi-7904-陶陶摘苹果
- Android实战——jsoup实现网络爬虫,糗事百科项目的起步
- eclipse 安装反编译工具
- 适配器设计模式(Adapter Pattern)
- Oracle数据库
- Ajax三级联动下拉选择省市区
- 【SocketIO】笔记
- maven+springmvc+spring+mybatis+velocity整合
- Aspect-level Sentiment Classification using attention mechanism
- 把幻灯片PPT转换为安卓APK
- 使用密钥认证机制远程登录linux
- JVM性能调优监控工具总结
- 【HDU5770】【线段树】【扫描线】Treasure 题解
- informix数据库jdbc操作报错:Error changing logging status - 'nmosdb'. iserrno 107.