当前位置: 首页 > news >正文

在Ajax中使用XML通信

web游览器中的javascript冰没有一个通用的xml解析器用,xhr对象可以帮助我们解析xml响应!

客户端代码如下:

<html>
<head>
<title>Hello Ajax version 6</title>
<style type='text/css'>
* { font-family: Tahoma, Arial, sans-serif; }
#helloTitle{ color: #48f; }
.sidebar{
  background-color: #adf;
  color: navy;
  border: solid blue 1px;
  width: 180px;
  height: 200px;
  padding: 2px;
  margin: 3px;
  float: left;
}
</style>
<script type='text/javascript' src='prototype.js'></script>
<script type='text/javascript'>
window.οnlοad=function(){
  $('helloBtn').οnclick=function(){
    var name=$('helloTxt').value;
    new Ajax.Request(
      "hello6.jsp?name="+encodeURI(name),
      {
        method:"get",
        onComplete:function(xhr){
          var responseDoc=xhr.responseXML;  //读取xml响应 从以前的responseText换的
          update(responseDoc);
        }
      }
    );
  }
}

function update(doc){//读取xml中的每一个元素,然后把数据转换为html语言呈现出来
	
  var personNode=doc.getElementsByTagName('person')[0]; //获得第一个person 节点
  
  var initial=personNode.getAttribute('initial');//利用getAttribute()函数通过名称获取属性的值
  
  var nameNode=personNode.getElementsByTagName('name')[0];
  
  var name=nameNode.firstChild.data;
  
  var likesNode=personNode.getElementsByTagName('likes')[0];
  
  var likesList=likesNode.getElementsByTagName('item');//很明显的是一个数组
  
  var likes=[];
  
  for (var i=0;i<likesList.length;i++){
	  
    var itemNode=likesList[i];
	
    likes[i]=itemNode.firstChild.data;
	
  }
  var recipeNode=personNode.getElementsByTagName('recipe')[0];
  
  var recipeNameNode=recipeNode.getElementsByTagName('name')[0];
  
  var recipeName=recipeNameNode.firstChild.data;
  
  var recipeSuggestNode=recipeNode.getElementsByTagName('serving-suggestion')[0];
  
  var recipeSuggest=recipeSuggestNode.firstChild.data;
  
  var ingredientsList=recipeNode.getElementsByTagName('ingredient');
  
  var ingredients={};
  
  for(var i=0;i<ingredientsList.length;i++){
	  
    var ingredientNode=ingredientsList[i];
    var qty=ingredientNode.getAttribute("qty");
    var iname=ingredientNode.firstChild.data;
    ingredients[iname]=qty;
	
  }
  <!--下边的jquery代码就是装配HTML的  语句-->
  $('helloTitle').innerHTML="<h1>Hello, <b><i>"+name+"</i></b></h1>";
  var likesHTML='<h5>'+initial+' likes...</h5><hr/>';
  for (var i=0;i<likes.length;i++){
    likesHTML+=likes[i]+"<br/>";
  }
  $('likesList').innerHTML=likesHTML;
  var recipeHTML='<h5>'+initial+'\'s favorite recipe is '+recipeName+'</h5>';
  for (key in ingredients){
    recipeHTML+=key+" : "+ingredients[key]+"<br/>";
  }
  recipeHTML+='<br/><i>'+recipeSuggest+'</i>';
  $('ingrList').innerHTML=recipeHTML;
}

</script>
</head>
<body>

<div id='likesList' class='sidebar'>
<h5>Likes</h5><hr/>
</div>
<div id='ingrList' class='sidebar'>
<h5>Ingredients</h5><hr/>
</div>
<div>
<div id='helloTitle'>
<h1>Hello, stranger</h1>
</div>
<p>Please introduce yourself by entering your name in the box below</p>
<input type='text' size='24' id='helloTxt'></input> <button id='helloBtn'>Submit</button>
</div>
</body>

</html>

jsp代码如下:(很明显的就是一个用xml写的)

<%--
simple JSP to generate some questions - and answers--%>
<jsp:directive.page contentType="text/xml"/>
<%
String name=request.getParameter("name");
%>
<person initial="<%=name.substring(0,1).toUpperCase()%>">
 <name><![CDATA[<%=name%>]]></name>
 <likes>
  <item>JavaScript</item>
  <item>Skiing</item>
  <item>Apple Pie</item>
 </likes>  
 <recipe>
  <name>apple pie</name>
  <ingredient qty="3kg">apples</ingredient>
  <ingredient qty="1kg">sugar</ingredient>
  <ingredient qty="2.4kg">pastry</ingredient>
  <serving-suggestion><![CDATA[Best Eaten Outdoors! Mmm!]]></serving-suggestion>
 </recipe>
</person>

另外我们还要用到prototype.js的封装集;

然后我们就可以完成通信了!

相关文章:

  • 平衡二叉树旋转
  • 用XPath和XSLT来更好的处理XML
  • sublime text3主题透明
  • JAR文件包及jar命令详解
  • String和Integer的特例
  • 卸载 Microsoft SQL Server 2008(亲身实践过的,完全可以卸载干净!)
  • Java项目打包工具安装失败解决方法
  • phpstorm+Xdebug断点调试PHP
  • java项目使用exe4j打包成exe文件
  • Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)
  • Java对于私有变量的“暴力反射”技术
  • Java相关书籍推荐
  • Java在利用反射条件下替换英文字母中的值
  • sql server 2008如何导入mdf,ldf文件
  • Servlet 中文乱码问题及解决方案剖析
  • $translatePartialLoader加载失败及解决方式
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • eclipse的离线汉化
  • exports和module.exports
  • express如何解决request entity too large问题
  • golang 发送GET和POST示例
  • Hibernate最全面试题
  • httpie使用详解
  • java小心机(3)| 浅析finalize()
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 京东美团研发面经
  • 区块链将重新定义世界
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 试着探索高并发下的系统架构面貌
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 数据库巡检项
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #{}和${}的区别?
  • #LLM入门|Prompt#3.3_存储_Memory
  • #QT(智能家居界面-界面切换)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (145)光线追踪距离场柔和阴影
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (过滤器)Filter和(监听器)listener
  • (七)c52学习之旅-中断
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • **PHP二维数组遍历时同时赋值
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NetCore项目nginx发布
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C++]unordered系列关联式容器
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟