当前位置: 代码迷 >> 综合 >> Ajax实现省市二级联动(解析XML内容)
  详细解决方案

Ajax实现省市二级联动(解析XML内容)

热度:77   发布时间:2023-09-20 23:00:14.0

xmlFile.jsp

<%@ page language="java"  pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>级联菜单</title><script type="text/javascript" src="./xmFile.js"> </script></head><body><select id="province" name="province"><option value="">请选择....</option></select><select id="city" name="city"><option value="">请选择.....</option></select></body>
</html>
xmFile.js

window.onload = function(){var xhr = ajaxFunction();xhr.onreadystatechange = function(){if(xhr.readyState==4){if(xhr.status==200){var docXml = xhr.responseXML;//利用alert()方法,进行测试数据内容:满足不了//alert(data);//console是Firebug的控制台,info就是打印信息//console.info(data);//解析XML内容var provinceXmlElements = docXml.getElementsByTagName("province");for(var i=0;i<provinceXmlElements.length;i++){var provinceXmlElement = provinceXmlElements[i];var provinceXmlValue = provinceXmlElement.getAttribute("name");//<option value="">请选择....</option>var option = document.createElement("option");option.setAttribute("value",provinceXmlValue);var text = document.createTextNode(provinceXmlValue);option.appendChild(text);var provinceElement = document.getElementById("province");provinceElement.appendChild(option);}//select标签的事件,option标签本身不具备任何事件内容document.getElementById("province").onchange = function(){//清空城市下拉列表var cityElement = document.getElementById("city");var options = cityElement.getElementsByTagName("option");//javascript的数组长度是可变的
//					for(var z=1;z<options.length;z++){
//						cityElement.removeChild(options[z]);
//						z--;
//					}for(var z=options.length-1;z>0;z--){cityElement.removeChild(options[z]);}//1 页面选中哪个省份var provinceValue = this.value;//2 解析XML内容//3 获取到XML内容中所有的province信息//4 遍历province信息for(var i=0;i<provinceXmlElements.length;i++){var provinceXmlElement = provinceXmlElements[i];//5 获取每一个省份信息var provinceXmlValue = provinceXmlElement.getAttribute("name");//6 页面选中省份==解析获取的省份if(provinceValue==provinceXmlValue){//7 将对应省份下的所有城市读取出来var cityXmlElements = provinceXmlElement.getElementsByTagName("city");for(var j=0;j<cityXmlElements.length;j++){var cityXmlElement = cityXmlElements[j];var cityXmlValue = cityXmlElement.firstChild.nodeValue;//<option value="">请选择....</option>var option = document.createElement("option");option.setAttribute("value",cityXmlValue);var text = document.createTextNode(cityXmlValue);option.appendChild(text);cityElement.appendChild(option);}}}}}}}xhr.open("get","../xmlFileServlet?timeStamp="+new Date().getTime(),true);xhr.send(null);function ajaxFunction(){var xmlHttp;try{ // Firefox, Opera 8.0+, SafarixmlHttp=new XMLHttpRequest();}catch (e){try{// Internet ExplorerxmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch (e){try{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch (e){}}}return xmlHttp;}
}
XMLFileServlet.java

package app.servlet;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 XmlFileServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//如果服务器端向客户端发送的数据格式是XML格式的话,一定设置响应首部信息:"Content-Type"为"text/xml"response.setContentType("text/xml;charset=utf-8");PrintWriter out = response.getWriter();/**  * 如果实际开发的话,查询数据库*  	* 结果集为JavaBean类型*  	* 结果集为集合内容:Array、List、Map及Set等集合*  *  * 现在不查询数据库,模拟查询数据库:手工方式构建XML格式*///手工方式构建的XML格式,实际上就是String类型的字符串out.println("<china>");out.println("<province name='吉林省'>");out.println("<city>长春</city>");out.println("<city>吉林市</city>");out.println("<city>四平</city>");out.println("<city>松原</city>");out.println("<city>通化</city>");out.println("</province>");out.println("<province name='辽宁省'>");out.println("<city>沈阳</city>");out.println("<city>大连</city>");out.println("<city>鞍山</city>");out.println("<city>抚顺</city>");out.println("<city>铁岭</city>");out.println("</province>");out.println("<province name='山东省'>");out.println("<city>济南</city>");out.println("<city>青岛</city>");out.println("<city>威海</city>");out.println("<city>烟台</city>");out.println("<city>潍坊</city>");out.println("</province>");out.println("</china>");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}




  相关解决方案