JSON & JSONP
说JSON和JSONP,也许你会豁然开朗,含jQuery用例
不是一回事!
JSON是描述信息的格式,JSONP是信息传递双方约定的方法。
JSON
MIME type(Media type):application/json
JSON "Object": A collection of key:value pairs, comma-seperated and enclosed in curly brackets
1. Properties
1) light-weight: 占用字符数量极少,特别适合互联网传递
2) text-based: 基于纯文本,跨平台传递极其简单;
3) easy to parse: 简单
4) Language Independent: Javascript原生支持,后台语言几乎全部支持
2. format
大括号(curly brackets){}用来描述一组“不同类型的无序键值对集合”(每个键值对可以理解为OOP的属性描述),方括号(square brackets)[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)
多个子项用逗号(comma)隔开
键名用双引号(double quotation marks)
键值、键名用冒号(colon)隔开
3. 例子
// 描述一次会议
var conference = {
"Conference": "Future Marketing",
"Date": "2012-6-1",
"Address": "Beijing",
"Members":
[
{
"Name": "Bob",
"Age": 32,
"Company": "IBM",
"Engineer": true
},
{
"Name": "John",
"Age": 20,
"Company": "Oracle",
"Engineer": false
},
{
"Name": "Henry",
"Age": 45,
"Company": "Microsoft",
"Engineer": false
}
]
}
// 读取参会者Henry是否工程师
var henryIsAnEngineer = conference.Members[2].Engineer;
JSONP
JSON with Padding is a JSON extension wherein the name of callback function is specified as an input argument of the call itself
MIME type(Media type):application/javascript
目的:解决cross-domain restriction,使一个网页能够向另一个网域的网页得到数据
原理:
1)利用 <script> tag 的src可以进行跨域数据获取
2)返回的JSON数据被一个callback函数wrapped around.
3)由于callback函数在本地的script中被定义,因此的到的JSON数据就能够成功被parse
4)如果没有wrap,返回的JSON数据相当于JS中的一段代码,无法解析,语法报错。
3)为了便于让服务器知道函数的名字,因此在讲callback函数的名字作为服务器请求的一部分, 常用jsonp或者callback作为query中参数名
- Example
<script type="application/javascript"
src="http://server.example.com/Users/1234?callback=parseResponse">
</script>