* XMLHttpRequest对象的responseXML属性:XML格式
* 服务器端:
* 设置响应首部信息,"Content-Type"为"text/xml"
* 手工构建一个xml格式的数据内容
* 如何将javabean、List、Array和Map集合转换成xml数据格式?
* 第三方工具:xStream
* 核心包:xstream-1.4.4.jar
* 必要依赖包:xpp3_min-1.1.4c.jar
* 客户端:XMLHttpRequest对象的responseXML属性


XmlFileServlet.java

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、List、Array和Map集合中
		
		//如何将javabean、List、Array和Map集合转换成xml数据格式?
		
		//手工构建一个xml格式的数据内容
		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>");
	}

}

<%@ 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>


window.onload = function(){
	var xhr = ajaxFunction();
	
	xhr.onreadystatechange = function(){
		if(xhr.readyState==4){
			if(xhr.status==200){
				var docXml = xhr.responseXML;
				
				var provinceXmlElements = docXml.getElementsByTagName("province");
				
				for(var i=0;i<provinceXmlElements.length;i++){
					var provinceXmlElement = provinceXmlElements[i];
					
					var provinceXmlValue = provinceXmlElement.getAttribute("name");
					
					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);
					
				}
				
				document.getElementById("province").onchange = function(){
					var cityElement = document.getElementById("city");
					var options = cityElement.getElementsByTagName("option");
					for(var z=1;z<options.length;z++){
						cityElement.removeChild(options[1]);
						z--;
					}
					
					var provinceValue = this.value;
					
					for(var i=0;i<provinceXmlElements.length;i++){
						var provinceXmlElement = provinceXmlElements[i];
					
						var provinceXmlValue = provinceXmlElement.getAttribute("name");
						
						if(provinceValue==provinceXmlValue){
							var cityXmlElements = provinceXmlElement.getElementsByTagName("city");
							
							for(var j=0;j<cityXmlElements.length;j++){
								var cityXmlElement = cityXmlElements[j];
								
								var cityXmlValue = cityXmlElement.firstChild.nodeValue;
								
								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+,Safari
	        xmlHttp=new XMLHttpRequest();
	    }
	    catch (e){
		   try{// Internet Explorer
		         xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		      }
		    catch (e){
		      try{
		         xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		      }
		      catch (e){}
		      }
	    }
	
		return xmlHttp;
	 }
}

Ajax返回XML数据的更多相关文章

  1. iOS:用于填充异步提取数据的设计模式

    我正在开发一个从Web获取数据并将其显示给用户的应用程序.假设数据是餐馆的评论,并且在一个视图上显示一个评论.用户可以向左或向右滑动以转到上一个/下一个评论.数据是异步提取的.这是问题陈述–假设已经提取了5条评论,并且用户正在查看当前的第3条评论.现在,第6次审核被提取,我想将其显示为用户的第4次审核.我的模型类应该如何通知视图控制器?除上述3之外的其他建议值得欢迎!

  2. xcode – Cordova plugin.xml添加“Header Search Paths”条目

    我希望将Cordova插件添加到Xcode项目后,在“HeaderSearchPaths”下添加一个新条目.如何在Cordovaplugin.xml文件中进行配置?

  3. ios – 1天后firebase crashlytics报告中没有数据

    解决方法对于那些仍然有问题的人.检查您的podfile中是否还有pod’Firebase/Crash’.当我删除旧的Firebase崩溃报告时,我的问题已修复.

  4. 将AWS DynamoDB表中的数据加载到iOS上的UITableView

    我的iOS应用程序中使用Swift编写的一个屏幕是UITableView.在这个UITableView中,我想从AWSDynamoDB表中加载名为Books的数据.目前,这是我在故事板上的原型单元格:在表格中我有3个属性:“名称”,“价格”和“ISBN”.我想要的是扫描“书籍”表,并过滤结果,因此结果的“ISBN”属性将包含数字“9”.在我筛选结果后,我想将它们应用到UITableView,因此“

  5. ios – 未为测试目标生成核心数据类

    我使用CoreData的自动生成的类.除测试目标外,我的项目还有3个目标.对于每个目标,正确生成CoreData类,我通过检查DerivedData文件夹进行验证.但是,尽管在核心数据模型文件中打勾,但不会为测试目标生成类.当我尝试引用测试目标中的一个CoreData类时,这会导致“未声明的标识符”和“使用未声明的类型”错误.我该如何解决这个问题?

  6. ios – 有关多个连接/提要/视图的XML解析的设计/实现建议

    >我应该在每个视图中都有解析器类/对象或解析XML提要吗?

  7. ios – NSURLCache和数据保护

    我正在尝试保护存储在NSURLCache中的敏感数据.我的应用程序文件和CoreDatasqlite文件设置为NSFileProtectionComplete.但是,我无法将NSURLCache文件数据保护级别更改为NSFileProtectionCompleteUntilFirstUserAuthentication以外的任何其他级别.这会在设备锁定时暴露缓存中的任何敏感数据.我需要缓存响应,以

  8. ios – 领域:如何获取数据库的当前大小

    是否有RealmAPI方法使用RealmSwift作为数据存储来获取我的RealmSwift应用程序的当前数据库大小?

  9. 核心数据 – 核心数据NSPersistentStore问题

    我正在开发一个分阶段推出的应用程序.对于每个sprint,都有数据库更改,因此已实现核心数据迁移.到目前为止,我们已经有3个阶段发布.每当连续升级时,应用程序运行正常.但每当我尝试从版本1升级到版本3时,都会发生’无法添加持久存储’错误.有人可以帮我解决这个问题吗?

  10. iOS Swift在哪里存储用户登录数据或OAuth令牌?

    事情并不像在用户手机上存储登录数据的最佳做法那样清晰.有人建议将userID=123和loggedIn=true类型数据等数据存储在NSUSerDefaults数据中.然而根据我的理解,根据这篇文章https://www.andyibanez.com/nsuserdefaults-not-for-sensitive-data/,这些数据可以很容易地被操作所以问题是:当用户浏览各种屏幕时,持久登录数

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部