Ajax应用之级联下拉列表
来源:互联网 发布:c语言32个关键字举例 编辑:程序博客网 时间:2024/06/05 14:43
在实际项目中经常用到列表联动,比如省份、城市、区域三级联动,这里简要以二级联动来进行演示,思路很简单:
1、程序进入后首先调用获取省份方法getProvince,使用Ajax向服务器请求省份数据。
2、回调函数获取到省份数据后,将数据加载到省份下拉列表中。
3、使用第一个省份调用getCity方法去获取该省份对应的城市数据
4、获取城市数据成功后,将数据加载到城市下拉列表中
5、省份下拉列表设置改变监听器,发生改变后再次调用getCity获取城市数据。
注:这是的数据是自己简要构造的,绑定的id也是直接绑定的名称,实际中应该从数据库读取分别绑定。
要实现三级联动继续添加获取区域的方法以及对应的回调方法即可。
示例如下:
index.jsp:
<%@ page language="java" import="java.util.*"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!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 language="JavaScript" src="JS/AjaxRequest.js"></script><script language="JavaScript">//获取省份function getProvince() {var loader = new net.AjaxRequest("ZoneServlet?action=getProvince&nocache="+ new Date().getTime(), dealProvince, onerror, "GET");}//处理获取到省份后的结果function dealProvince() {var provinceArr = this.req.responseText.split(",");for (i = 0; i < provinceArr.length; i++) {document.getElementById("province").options[i] = new Option(provinceArr[i], provinceArr[i]);}//初始时获取第一个省份的城市if (provinceArr[0] != "") {getCity(provinceArr[0]);}}//获取城市function getCity(selProvince) {var loader = new net.AjaxRequest("ZoneServlet?action=getCity&parProvince=" + selProvince+ "&nocache=" + new Date().getTime(), dealCity,onerror, "GET");}//处理获取城市的结果function dealCity() {var cityArr = this.req.responseText.split(",");document.getElementById("city").length = 0;for (i = 0; i < cityArr.length; i++) {document.getElementById("city").options[i] = new Option(cityArr[i],cityArr[i]);}}function onerror() {alert("您的操作有误!");}</script><title>起始页</title></head><body onload="getProvince()"><select name="province" id="province" onchange="getCity(this.value)"></select><select name="city" id="city"></select></body></html>
AjaxRequest.js:
var net = new Object();var req;var onload;var onerror;net.AjaxRequest = function(url, onload, onerror, method, params) {this.req = null;this.onload = onload;this.onerror = (onerror) ? onerror : this.defaultError;this.loadDate(url, method, params);}net.AjaxRequest.prototype.loadDate = function(url, method, params) {if (!method) {method = "GET";}if (window.XMLHttpRequest) {this.req = new XMLHttpRequest();} else if (window.ActiveXObject) {this.req = new ActiveXObject("Microsoft.XMLHTTP");}if (this.req) {try {var loader = this;this.req.onreadystatechange = function() {net.AjaxRequest.onReadyState.call(loader);}this.req.open(method, url, true);if (method == "POST") {this.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}this.req.send(params);} catch (e) {this.onerror.call(this);}}net.AjaxRequest.onReadyState = function() {var req = this.req;var ready = req.readyState;if (ready == 4) {if (req.status == 200) {this.onload.call(this);} else {this.onerror.call(this);}}}net.AjaxRequest.prototype.defaultError = function() {alert("错误数据\n\n回调状态:" + this.req.readyState + "\n状态:" + this.req.status);}}
ZoneServlet.java:
package com.home.web.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class AddServlet */@WebServlet("/ZoneServlet")public class ZoneServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static Map<String, String[]> provinceMap = new HashMap<>(); static { provinceMap.put("四川省", new String[] { "成都市", "广安市", "资阳市" }); provinceMap.put("广东省", new String[] { "广州市", "深圳市", "珠海市" }); } /** * @see HttpServlet#HttpServlet() */ public ZoneServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); if ("getProvince".equals(action)) { getProvince(request, response); } else if ("getCity".equals(action)) { getCity(request, response); } } public void getProvince(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); String result = ""; Set<String> set = provinceMap.keySet(); Iterator<String> it = set.iterator(); while (it.hasNext()) { result = result + it.next() + ","; } result = result.substring(0, result.length() - 1); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); } public void getCity(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); String result = ""; String selProvince = request.getParameter("parProvince"); selProvince = new String(selProvince.getBytes("ISO-8859-1"), "gbk"); String[] arrCity = provinceMap.get(selProvince); for (String city : arrCity) { result = result + city + ","; } result = result.substring(0, result.length() - 1); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }}
0 0
- Ajax应用之级联下拉列表
- 应用Ajax技术实现无刷新的级联下拉列表
- Ajax实现级联下拉列表
- ajax实现下拉列表级联显示
- Ajax+SSM实现四级联下拉列表
- 图文并茂之SharePoint 2010 级联下拉列表
- jquery之动态级联下拉列表
- jquery之动态级联下拉列表
- jquery之动态级联下拉列表
- AJAX应用之级联菜单
- AJAX应用之级联菜单
- 使用jQuery+ajax实现级下拉列表的级联显示
- N级联下拉列表
- 级联下拉列表
- 级联下拉列表
- select下拉列表级联
- 级联下拉列表
- 级联下拉列表
- Ubuntu 安装 ZooKeeper
- GYM 100090 L.Hard Problem(水~)
- Android模板制作
- 数据结构-顺序表
- Linux线程同步之——互斥量(Mutex)
- Ajax应用之级联下拉列表
- 两个线程分别执行100次i++
- leetcode81. Search in Rotated Sorted Array
- Clientdataset 复制数据
- MFC -eidt设置最大size
- 常见对话框
- Qt5.8 + VS2015 使用QMessageBox中文乱码
- 写好你的JavaScrip
- 在windows下用pycaffe跑FCN用GPU模式报(0xc0000409