Ajax和WEB服务数据格式:JSON JSONP
在之前的文章中我们讲到了早期的集中数据格式,XML,SOAP,HTML。现在,我们来看看JSON和JSONP。
JSON
JSON(JavaScript Object Notation)是Douglas Crockford提出的。他是一个轻量级的数据交换格式,基于JavaScript对象字面量。
我们可以将之前的XML图书格式的文件内容转换成下面的JSON格式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[ { title: "The Principles of Beautiful Web Design, 2nd Edition", url: "http://www.sitepoint.com/books/design2/", author: "Jason Beaird", publisher: "SitePoint", price: { currency: "USD", amount: 39.95 } }, { title: "jQuery: Novice to Ninja", url: "http://www.sitepoint.com/books/jquery1/", author: "JEarle Castledine & Craig Sharkie", publisher: "SitePoint", price: { currency: "USD", amount: 29.95 } }, { title: "Build Your Own Database Driven Website", url: "http://www.sitepoint.com/books/phpmysql4/", author: "Kevin Yank", publisher: "SitePoint", price: { currency: "USD", amount: 39.95 } } ] |
这是一个通过对象来表示书的一种方式,并且有title、url、author、publisher、和price等信息。price是一个子对象,并且他包含货币类型和价格。
在JavaScript中很容易处理JSON。你可以使用浏览器原生的JSON.parse方法或者Douglas Crockford的JSON-js库。就算这些都不能用,你也可以使用javaScript的eval方法。不需要再写额外的处理数据的方法:
1 2 3 4 |
var json = xhr.responseText; var book = JSON.parse(json); alert(book[0].title); //first book title alert(book[1].url); //second book URL |
使用JSON的优点在于:
JSON也有一些劣势:
尽管如此,JSON的优点还是很明显的。他是Ajax数据交互的很理想的数据格式。
JSONP (JSON-p)
如果你使用XMLHttpRequest来调用JSON的web服务,返回的数据可以通过JSON.parse()或者eval()来处理。你也可以使用Ajax组件来做脚本的插入,例如,将远程加载的脚本插入在DOM节点中,通过script标签调用:
1 2 3 |
var script = document.createElement("script"); script.src = "http://webservice.com/?a=1&b=2"; document.getElementsByTagName("head")[0].appendChild(script); |
跟XMLHttpRequest不同,插入script标签可以在不同源的情况下获取其他服务的数据。这对于流量分析、书签工具、小插件、广告系统来说是很理想的选择。
不过,返回的JSON数据通常都是当做本地的代码立即执行。也不会赋值给变量,所以后面就再访问不到了。不过这个问题我们可以通过给网络服务传递一个callback参数来进行回调:
1 2 3 |
var script = document.createElement("script"); script.src = "http://webservice.com/?a=1&b=2&callback=MyDataHandler"; document.getElementsByTagName("head")[0].appendChild(script); |
这时候,网络服务通常会返回一个包含在一个回调函数中的JSON数据,这就是JSONP,或者“JSON with padding”,看看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MyDataHandler([ { title: "The Principles of Beautiful Web Design, 2nd Edition", url: "http://www.sitepoint.com/books/design2/", author: "Jason Beaird", publisher: "SitePoint", price: { currency: "USD", amount: 39.95 } } ... ]); |
在JSON对象下载完毕之后,作为参数传递给了MyDataHandler()方法。
JSON和JSONP已经是现在最流行的异步交互的数据格式了。但是在压缩传输数据大小的方面还是可以再研究的。RockUX会在后面讲到关于自定义数据返回。
看看这一系列其他的文章:
建议继续学习:
- JSONP与POST方式请求 (阅读:10362)
- JSON和JSONP的区别 (阅读:7691)
- XML和JSON (阅读:6719)
- 如何编写一个JSON解析器 (阅读:5425)
- 理解JSON:3分钟课程 (阅读:4795)
- 用 JavaScript 对 JSON 进行模式匹配 (Part 1 - 设计) (阅读:4398)
- 前端模板引擎 (阅读:3782)
- 用 JavaScript 对 JSON 进行模式匹配 (Part 2 - 实现) (阅读:3735)
- [python]定制JSON中的浮点数格式 (阅读:3028)
- Ajax和WEB服务数据格式:XML SOAP HTML (阅读:3044)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:RockUX 来源: RockUX | WEB、前端、JavaScript、PHP
- 标签: JSON JSONP 格式
- 发布时间:2011-06-02 23:34:35
- [51] Oracle MTS模式下 进程地址与会话信
- [49] 图书馆的世界纪录
- [49] IOS安全–浅谈关于IOS加固的几种方法
- [48] 如何拿下简短的域名
- [45] 【社会化设计】自我(self)部分――欢迎区
- [45] android 开发入门
- [42] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] Go Reflect 性能
- [41] 界面设计速成
- [40] 视觉调整-设计师 vs. 逻辑