• Ajax二级联动下拉列表


    客户端与服务器端采用XML进行通信。

    程序中涉及到了xml文件的组装发送和解析。

    • 服务器端
    public class CityServlet extends HttpServlet {
    	private static final String CONTENT_TYPE ="text/xml; charset=utf-8";
    	
    	public CityServlet(){
    		super() ;
    	}
    	public void destroy(){
    		super.destroy(); 
    	}
    	/**
    	 * 数据是xml格式的
    	 */
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		resp.setContentType(CONTENT_TYPE); 
    		String province = req.getParameter("province") ;
    		StringBuffer city = new StringBuffer("<citys>") ;//记录返回XML串的对象
    		List list = cityInit ();
    		if ("gx".equals(province)){
    			for (int i =0;i<list.size();i++){
    				city.append("<city>"+list.get(i)+"</city>") ;
    			}
    		}
    		city.append("</citys>") ;
    		PrintWriter out = resp.getWriter() ;
    		out.print(city.toString());
    		out.flush(); 
    		out.close(); 
    	}
    	private List<String> cityInit() {
    		List<String > cityList = new ArrayList<String>();
    		cityList.add("nanning ");
    		cityList.add("guiling") ;
    		cityList.add("hena") ;
    		return cityList ;
    	}
    	
    }
    

    配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <servlet>
        <servlet-name>cityservlet</servlet-name>
        <servlet-class>com.chuiyuan.servlet.CityServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>cityservlet</servlet-name>
        <url-pattern>/servlet/CityServlet</url-pattern>
      </servlet-mapping>
    
    </web-app>
    
    • 客户端
    <%@ page language="java" import ="java.util.*" pageEncoding="gb2312" %>
    <html>
    	<head>
    		<title>dynamic load</title>
    	 	<script type="text/javascript">
    	 	var xmlHttp = false ;
    	 	function createXMLHttpRequest(){
    	 		if (window.ActiveXObject){//Internet Explorer时,创建XMLHttpRequest对象的方法
    	 			try{
    	 				xmlHttp = new ActiveXObject ("Msxml2.XMLHTTP") ;
    	 			}catch (e){
    	 				try{
    	 					xmlHttmp = new ActiveXObject ("Microsoft.XMLHTTP") ; 
    	 					 //旧版本的Internet Explorer,创建XMLHttpRequest对象
    	 				}catch (e){
    						window.alert("创建XMLHttpRequest对象错误 "+ e) ;	 				
    	 				}
    	 			}
    	 		}else if (window.XMLHttpRequest ){//mozilla时,创建XMLHttpRequest对象的方法
    				xmlHttp = new XMLHttpRequest();	 		
    	 		}
    	 		if (!(xmlHttp)){
    	 			//未成功创建XMLHttpRequest对象
    		   		 window.alert("创建XMLHttpRequest对象异常!");
    	 		}
    	 	}
    	 	//下拉列表改变时的操作
    	 	function proChange(objVal ){
    	 		alert ("proChange:"+ objVal );
    	 		createXMLHttpRequest() ;//
    	 		document.getElementById ("city").length=1;//根据ID获取指定元素,并赋值
    	 		xmlHttp.onreadystatechange = cityList ;//指定onreadystatechange处理函数
    	 		var url ="/Ajax1/servlet/CityServlet?province="+objVal ;//url 
    	 		xmlHttp.open("GET", url ,true) ;
    	 		xmlHttp.send(null) ;
    	 	
    	 	}
    	 	function cityList (){ //onreadtstatechange的处理函数 
    	 		if (xmlHttp.readyState==4){
    	 			if (xmlHttp.status==200){
    	 				alert ("cityList:"+xmlHttp.responseXML) ;
    	 				parseXML(xmlHttp.responseXML) ;//解析服务器返回的XML数据
    	 			}
    	 		}
    	 	}
    	 	function parseXML (xmlDoc ){
    	 		alert("parseXML") ;
    	 		var len = xmlDoc.getElementsByTagName("city") ;
    	 		alert("parseXML len:"+len.length) ;
    	 		//获取XML数据中所有的“city”元素对象集合
    	 		var _citySel = document.getElementById ("city") ;//根据ID获取页面中的select元素
    	 		for (var i=0; i<len.length; i++){//遍历XML数据并给select元素添加选项
    	 			var opt = document.createElement("OPTION");//创建option对象
    	 			opt.text = xmlDoc.getElementsByTagName ("city")[i].firstChild.data;
    	 			alert("parseXML:"+opt.text) ;
    	 			//指定新创建元素的text属性值
    	 			opt.value= xmlDoc.getElementsByTagName ("city")[i].firstChild.data;
    	 			 //指定新创建元素的value属性值
    	 			_citySel.add(opt) ;
    	 		}  
    	 	}
    	 	</script>
    	</head>
    	
    	<body>
    		<table align ="center" border=1 width="320">
    			<tr>
    				<td>省份:</td>
    				<td>
    					<select id="province" onchange="proChange(this.value);"  style="85">
    						<option value="gd">guangdong</option>
    						<option value="gx">guangxi</option>
    						<option value="hn">henan</option>
    						<option value="hb">hubei</option>
    					</select>
    				</td>
    			</tr>
    			<tr>
    				<td>城市</td>
    				<td>
    					<select id ="city" style="85">
    						<option value=""> 请选择</option>
    					</select>
    				</td>
    		</table>
    	</body>
    </html>
    

    js 调试可以用alert 。

    servlet调试可以用System.out.println()。 

      

      

  • 相关阅读:
    IIS 无法下载EXE
    大数据ListView
    vss error reading from file
    fatal error LNK1107
    A Generic Singleton Class
    转 ORACLE 的FOR循环、游标、时间值函数、转换函数题目
    regsvr32.exe 会用
    MSChat 临时目录
    关于LinkedList的三种写法的效率
    旋转门压缩算法
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4606221.html
Copyright © 2020-2023  润新知