ajax中xml格式数据解析及json格式数据解析

xml的数据内容是:

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
	<book>
		<name>三国演义</name>
		<category>文学</category>
		<desc>描述</desc>
	</book>	
	<book>
		<name>水浒传</name>
		<category>文学</category>
		<desc>草寇or英雄豪杰</desc>
	</book>	
	<book>
		<name>西游记</name>
		<category>文学</category>
		<desc>妖魔鬼怪牛鬼蛇神什么都有</desc>
	</book>	
	<book>
		<name>红楼梦</name>
		<category>文学</category>
		<desc>宝哥哥与林妹妹的爱情史</desc>
	</book>	
</bookstore>

要实现的功能是,在页面点击按钮点击过后,xml的内容渲染到页面中,渲染格式如图:

html代码为:

<body>
	<input type="button" value="点击" id="btn">
	<div>
		<table id="bookInfo">

		</table>
	</div>
</body>

 

js代码为:

xml的解析解析就像用js处理html文本一样。

var data = xhr.responseXML;
var bs = data.getElementsByTagName('bookstore')[0];
console.log(bs);
var books = bs.getElementsByTagName('book');
var tag = '';
for(var i=0;i<books.length;i++){
   var book = books[i];
   //下面三个获得的都是包含标签和文本内容的,而我们需要的文本内容
   // 所以需要用下面封装的getNodeText函数去获得文本内容
  var name = book.getElementsByTagName('name')[0];
  var category = book.getElementsByTagName('category')[0];
  var desc = book.getElementsByTagName('desc')[0];
  tag += '<tr><td>'+getNodeText(name)+'</td><td>'+getNodeText(category)+'</td><td>'+getNodeText(desc)+'</td></tr>';
}
var tbody = document.createElement('tbody');
tbody.innerHTML = tag;
document.getElementById('bookInfo').appendChild(tbody);    

json数据解析方式为:

注意:

    xhr.responseText是字符串的形式,而我们想要用它的话,就必须将它转换为json数据对象的形式。因为只有对象才可以用点语法及[“属性”]的方式调用。

所以JSON.parse是将字符创转化为json数据对象,eval()函数也可以做到,使用方式:eval(“(”+ string +“)”);

但是使用eval函数有风险:eval("alert(123);")会执行,也就是说在eval中写符合规范的代码时,eval会帮你解析并执行它。所以会存在安全性上面的问题,如果后台传过来json对象中包含账户密码什么的,就容易被泄露。而且如果用eval传过来一个非法的js代码来获取你的账户信息什么的,这是不允许的。

JSON.stringify()函数是将json数据对象转化为字符串。

xhr.onreadystatechange = function(){
   if(xhr.readyState == 4 && xhr.status == 200){
	  var data = JSON.parse(xhr.responseText);
	  console.log(data);
	  var total = data.total;
	  var list = data.data;
          var tag = '';
	  for(var i=0;i<total;i++){
		var book = list[i];
		tag += '<tr><td>'+book.name+'</td><td>'+book.category+'</td><td>'+book.desc+'</td></tr>';
	  }
	  var tbody = document.createElement('tbody');
	  tbody.innerHTML = tag;
	  document.getElementById('bookInfo').appendChild(tbody);
  }
}
<script type="text/javascript">
	window.onload = function(){
		var btn = document.getElementById('btn');
		btn.onclick = function(){
			showBookInfo();
		}
	}
	//获取文本节点内容,存在兼容性
    function getNodeText(node){
    	if(window.ActiveXObject){//IE
    		return node.text;
    	}else{//标准浏览器
    		if(node.nodeType == 1){
    			return node.textContent;
    		}
    	}
    }
	function showBookInfo(){
		document.getElementById('bookInfo').innerHTML = '';
		var xhr = null;
		if(window.XMLHttpRequest){
			xhr = new XMLHttpRequest();
		}else{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		}
		console.log('第一步'+xhr.readyState);
		xhr.open('get','./testDate.xml');
		console.log('第二步'+xhr.readyState);
		xhr.send(null);
		xhr.onreadystatechange = function(){
			if(xhr.readyState == 4 && xhr.status == 200){
				// console.log(data); 
				var data = xhr.responseXML;
					var bs = data.getElementsByTagName('bookstore')[0];
					console.log(bs);
					var books = bs.getElementsByTagName('book');
					var tag = '';
					for(var i=0;i<books.length;i++){
						var book = books[i];
						//下面三个获得的都是包含标签和文本内容的,而我们需要的文本内容
						// 所以需要用下面封装的getNodeText函数去获得文本内容
						var name = book.getElementsByTagName('name')[0];
						var category = book.getElementsByTagName('category')[0];
						var desc = book.getElementsByTagName('desc')[0];
						tag += '<tr><td>'+getNodeText(name)+'</td><td>'+getNodeText(category)+'</td><td>'+getNodeText(desc)+'</td></tr>';
					}
					var tbody = document.createElement('tbody');
					tbody.innerHTML = tag;
					document.getElementById('bookInfo').appendChild(tbody);		
			}
		}
	}
</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值