zoukankan      html  css  js  c++  java
  • AJAX实现简单的省市二级联动

    基本思路:前台的下拉框值改变时,AJAX将值传入后台的servlet进行处理,根据不同的值返回不同的JSON数据,然后前台进行解析成字符数组,添加到option中.

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    	<head>
    		<base href="<%=basePath%>">
    
    		<title>My JSP 'index.jsp' starting page</title>
    		<meta http-equiv="pragma" content="no-cache">
    		<meta http-equiv="cache-control" content="no-cache">
    		<meta http-equiv="expires" content="0">
    		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    		<meta http-equiv="description" content="This is my page">
    		<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    <script type="text/javascript">
    	var xmlHttpRequest;
    	function createXmlHttpRequest() {
    		if (window.XMLHttpRequest) {
    			xmlHttpRequest = new XMLHttpRequest();
    		} else {
    			xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	function getCity(value) {
    		createXmlHttpRequest();
    		xmlHttpRequest.open("POST", "cityAction?value="+value,true); //将value传递到后台的servlet 
    		xmlHttpRequest.onreadystatechange = showMsgCallback;
    		xmlHttpRequest.send(null);
    	}
    
    	function showMsgCallback() {
    		if (xmlHttpRequest.readyState == 4) {
    			if (xmlHttpRequest.status == 200) {
    				var str = eval("("+xmlHttpRequest.responseText+")"); //JSON格式转换为字符数组 
    				if(str!=null&&str!=""){
    					document.getElementById("city").options.length=0;    //将原有的选项清空  
    					document.getElementById("city").options.add(new Option("--选择"));
    					for(var i=0;i<str.length;i++){  //遍历数组  
    					    var option = document.createElement("option");   //创建一个 option
    					    option.text = str[i];  //设置显示的值 
    					    option.value = str[i]; //设置value属性值 
    					    document.getElementById("city").options.add(option);   //将新建的option添加到select中 
    					}    
    				}else{  
    					document.getElementById("city").options.length=0;    
    					document.getElementById("city").options.add(new Option("--选择"));
    				}
    				       
    			}
    		}
    	}
    </script>
    	</head>
    	<body>
    		省:
    		<select onchange="getCity(this.value)">
    			<option>
    				--选择
    			</option>
    			<option value="北京">
    				北京
    			</option>
    			<option value="深圳">
    				深圳
    			</option>
    			<option value="河南">
    				河南
    			</option>
    		</select>
    		城市:
    		<select id="city">
    			<option>
    				--选择
    			</option>
    		</select>
    	</body>
    </html>
    

    Servlet:   CityAction.java

    package com.org;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class CityAction extends HttpServlet {
    
    	
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html;charset=utf-8");
    		request.setCharacterEncoding("utf-8");
    		PrintWriter out = response.getWriter();
    		String province = request.getParameter("value");
    		StringBuffer buf = new StringBuffer("[");
    		//数据只是测试   通常是从数据库中取出数据
    		if("北京".equals(province)){
    			buf.append("\"").append("海淀").append("\"").append(",");
    			buf.append("\"").append("朝阳").append("\"").append(",");
    			buf.append("\"").append("昌平").append("\"").append(",");
    			buf.append("\"").append("大兴").append("\"");
    			buf.append("]");
    			out.print(buf);
    			System.out.println(buf);
    		}else if("深圳".equals(province)){
    			buf.append("\"").append("福田").append("\"").append(",");
    			buf.append("\"").append("罗湖").append("\"").append(",");
    			buf.append("\"").append("南山").append("\"").append(",");
    			buf.append("\"").append("盐田").append("\"");
    			buf.append("]");
    			out.print(buf);
    			System.out.println(buf);
    		}else if("河南".equals(province)){
    			buf.append("\"").append("郑州").append("\"").append(",");
    			buf.append("\"").append("新乡").append("\"").append(",");
    			buf.append("\"").append("洛阳").append("\"").append(",");
    			buf.append("\"").append("商丘").append("\"");
    			buf.append("]");
    			out.print(buf);
    			System.out.println(buf);
    		}else{
    			out.print("[\"\"]");
    		}
    		System.out.println(province+"******");
    		out.flush();
    		out.close();
    	}
    
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		this.doGet(request, response);
    	}
    
    }
    


  • 相关阅读:
    小木虫等论坛自动签到程序发布
    第一篇随笔
    工作和兴趣哪个更重要?
    weblogic 启动时 报错
    C#动态调用webservice (转载)
    U盘加载,卸载,拔出,插入(转载)
    Simple zip archive unzipper(转载)
    Best C# Blogs(强烈推荐)
    数据无法导入ArcSDE
    Oracle10.2.0.1.0升级Oracle10.2.0.2.0补丁安装指南(转载)
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131576.html
Copyright © 2011-2022 走看看