XML和JSON数据传输
XML数据传输
xml文档:https://www.w3school.com.cn/xml/index.asp
Ajax请求的过程中,返回给我们的是一个类似于HTML 结构的数据格式,但是这个不是HTML代码而是XML格式数据,因为我们之前说过Ajax的x就是XML,也就是当初设计Ajax定义的数据传输的格式v
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML,不是HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
什么叫做标签预定义,也就是可以自己命名标签名
.xml文件
<?xml version="1.0" encoding="utf-8" ?> <jibenxinxi> <xuesheng> <xingming>小明</xingming> <xuehao>1</xuehao> <xingbie>男</xingbie> <age>18</age> <sex>男</sex > </xuesheng> </jibenxinxi>
浏览器会以特殊的样式展现
也就是说我们的请求接口比如我们http://127.0.0.1/1.php返回给我们的是下面的格式
<ul> <li>学号:1</li> <li>姓名:小明</li> <li>性别:男</li> <li>年龄:18</li> </ul>
使用xhr.responseText去接收,因为返回给我们的是一个字符串包裹的HTML结构,所以我们可以使用innerHTML去进行拼接,过程中可以识别字符串中的HTML结构
但是这样操作有很大的弊端:
返回给我们的如果是HTML的结构,此时注定拓展性不好,因为我们不需要固定结构,比如当前返回给我们的是一个ul和li 的结构但是我们此时页面中的功能不适用于这个ul和li的结构,所以我们需要自己进行拓展,这个时候我们就想到了JOSN格式
JSON的数据传输
到现在我们回想一下,XML格式和JSON格式的各自的优点,我们会发现XML能干的事情,JSON也能干,JSON能干的事情,XML未必能行
- JSON有更丰富的数据结果;XML仅仅能够通过标签对儿来实现
- JSON拥有数组和对象设置;并且互相嵌套,数据可以变得更负责;XML只能通过标签去进行区分和嵌套
- JSON更轻量,没有对于的内容,都是数据;XML除了数据还有多余的标签结构
Ajax读取进来的数据都是字符串,即便返回给我们的是JSON,也会被xhr.responseText识别为字符串
解决办法
方法1:使用eval()语句,eval()语句可以将字符串转换为代码语句
var data = xhr.responseText; var obj = eval("("+data+")")
返回的结果不可以直接放到eval()函数中,因为eval() 本质是转换JavaScript的语句的,所以如果我们想让他识别HTML结构代码可以使用括号包裹起来
方法2:是使用内置构造函数Function
var obj = (new Function("return"+xhr.responseText))()
通过内置构造函数进行一次周转,利用函数的return,将字符串去掉了
方法3:JSON.parse方法
var obj = JSON.parse(data)
现在工作最长用就是这种方法,因为它的兼容是IE6和7一下,所以我们基本已经不考虑这些兼容了
JOSN.parse()和JSON.stringify()方法是一对,JSON.parse()是将字符串转换为JSON格式,二JSON.stringify()方法是将JSON格式转换为字符串