博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Ajax技术】利用XHR接受与处理XML数据
阅读量:6952 次
发布时间:2019-06-27

本文共 4246 字,大约阅读时间需要 14 分钟。

我们将之前写的应用使用xml返回数据,下面是如何修改:
程序清单
服务端Servelt:AjaxXMLServer.java
静态页面:ajaxXml.html
javascript脚本文件:verifyxml.js
AjaxXMLServer.java:
import java.io.IOException;import java.io.PrintWriter;import java.net.URLDecoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//这个servlet返回的是XML的数据public class AjaxXMLServer extends HttpServlet {	 protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {	        doGet(httpServletRequest, httpServletResponse);	 }	 protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {	        try{	        	//修改点1------相应的ContentType必须为text/xml	            httpServletResponse.setContentType("text/xml;charset=utf-8");	            PrintWriter out = httpServletResponse.getWriter();	            //inte用来记录验证次数	            Integer inte = (Integer) httpServletRequest.getSession().getAttribute("total");	            int temp = 0;	            if (inte == null) {	                temp = 1;	            } else {	                temp = inte.intValue() + 1;	            }	            httpServletRequest.getSession().setAttribute("total",temp);	            //1.取参数	            String old = httpServletRequest.getParameter("name");	            //String name = new String(old.getBytes("iso8859-1"),"UTF-8");	            String name = URLDecoder.decode(old,"UTF-8");	            	            //修改点2-----返回的数据需要拼装成xml格式            	StringBuilder builder=new StringBuilder();            	builder.append("
"); //2.检查参数是否有问题 if(old == null || old.length() == 0){ builder.append("用户名不能为空").append("
"); } else{ if(name.equals("hpu")){ //4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户 //写法没有变化,本质发生了改变 builder.append("用户名[" + name + "]已经存在,请使用其他用户名, " + temp).append(""); } else{ builder.append("用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp).append(""); } out.println(builder.toString()); System.out.println(builder.toString()); } } catch(Exception e){ e.printStackTrace(); } }}
ajaxXml.html:
      用户校验ajax实例    

用户校验ajax实例

请输入用户名:

verifyxml.js:

//用户名校验的方法//这个方法使用XMLHttpRequest对象来进行AJAX的异步数据交互var xmlhttp;function verify(){	//1.使用最基本的DOM_API来获取文本框中的值	//document.getElementById("username")是dom中获取元素节点的一种方法,一个元素节点对应HTML	//页面中的一个标签,.value可以获取一个元素节点的value属性值	//	var username=document.getElementById("username").value;		//2.创建XMLHttpRequest对象	//这是XMLHttpRequest对象五步使用中最复杂的一步	//这是由于各种浏览器兼容问题造成的,要使用各种库来屏蔽掉这种差异	//下面根据IE和其它类型的浏览器建立这个对象的不同方式写不同的代码	if(window.XMLHttpRequest){		//针对FireFox、Mozillar、Opera、Safari、IE7、IE8		xmlhttp=new XMLHttpRequest();		//修复类似Mozillar浏览器的bug		if(xmlhttp.overrideMimeType){			xmlhttp.overrideMimeType("text/xml");		}	}else if(window.ActiveXObject){		//所有的IE中window.ActiveXObject条件都成立		//针对IE6、IE5.5、IE5(现在没人用了,可以把这条if分支删除)		//两个可以用于创建XMLHttpRequest对象的控件名称,保存在一个js的数组中		//排在前面的版本最新		var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];		for(var i=0;i
0){ //可能会找到很多message节点,所以接收到的是数组,因为就一个,所以取0号节点 //message标签中的文本在dom中是message标签所对应的元素节点的子节点,firstChild可以获取到 //当前节点的第一个子节点 //通过以下方式就可以获取到文本内容所对应的节点 var textNode=messgaeNode[0].firstChild; //对于文本节点来说,可以通过nodeValue的方式返回文本节点的内容 var responseMessage=textNode.nodeValue; //将数据显示在界面上 //通过DOM的方式找到div标签对应的元素节点 var divNode=document.getElementById("result"); //设置元素节点中的html内容 divNode.innerHTML=responseMessage; }else{ alert("XML数据错误,原始文本内容为:"+xmlhttp.responseText); } }else{ alert("XML数据错误,原始文本内容为:"+xmlhttp.responseText); } }else{ alert("出错了!"); } }}

我们在js的回调函数中为了保证对数据处理的正确性,进行了多层次的判断

测试:输入123点击校验,服务器端返回的信息在界面上显示,试验成功!

总结----AJAX应用的五个步骤

1.建立XMLHttpRequest
2.设置回调函数
3.使用open方法与服务器建立连接
4.向服务器端发送数据
5.再回调函数针对不同相应状态进行处理

转载请注明出处:

你可能感兴趣的文章
约瑟夫问题
查看>>
NinePatchChunk.java分析
查看>>
非template/render模式下使用iview组件时标签需要转化
查看>>
搜狐笔试 最大连续递增子段和 关键词连续递增
查看>>
.NET URL 301转向方法的实现
查看>>
新浪微博开放平台链接耗尽的情况分析
查看>>
极限编程的12个实践原则
查看>>
javascript--返回顶部效果
查看>>
C# NamePipe使用小结
查看>>
ZooKeeper Watcher注意事项
查看>>
Linux下清理内存和Cache方法
查看>>
表单元素的外观改变(webkit and IE10)
查看>>
帆软报表学习笔记②——行转列
查看>>
redis应用场景:实现简单计数器-防止刷单
查看>>
两款开发辅助工具介绍
查看>>
python 文件的打开与读取
查看>>
基于ROS的运动识别
查看>>
python 之selectors 实现文件上传下载
查看>>
【hdu - 2568】ACM程序设计期末考试081230
查看>>
C语言基础(一)
查看>>