json和jsonp区别
json | jsonp |
---|---|
一种数据交换格式 | 一种非官方跨域数据交互协议 |
json
1.json格式
json可以支持以下几种数据格式,由于前面三种在对象和数组两种格式中体现,所以重点介绍两种:
1.数字(整数或浮点数)
2.字符串(在双引号中)
3.逻辑值(true 或 false)
4.数组(在中括号中)
5.对象(在大括号中)
(1).对象格式--------{key:value}
例子:
1.一个对象
var person={
name:'syj', //字符串
age:18, //数值
sex:'女',
isLearning:true, //布尔
}
2.多个对象
var company={
{name:'腾讯',address:'北京'},
{name:'阿里巴巴',address:'深圳'}
}
(2).数组格式---------[{key1:value1},{key2:value2}]
例子:
var arr=[
{name:'腾讯',address:'北京'},
{name:'阿里巴巴',address:'深圳'}
]
json数据接收
有时候我们在传输数据的时候会遇到数据是一个对象的形式,所以我们需要将json数据先转换成字符串,然后在接收的时候再解析成对象的格式
1.将对象格式转换成字符串格式
JSON.stringify(value[, replacer[, space]])
参数说明:
value : 必需, 一个有效的 JSON 对象。
replacer : 可选。用于转换结果的函数或数组。
例子:
var arr = [ "syj", "yjh", "sjm", "kcl" ];
var myJSON = JSON.stringify(arr);
myJSON 为字符串。
2.将字符串解析成对象格式
JSON.parse(text[, reviver])
参数说明:
text : 必需, 一个有效的 JSON 字符串。
reviver : 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
var myJSON='[ "syj", "yjh", "sjm", "kcl" ]'
JSON.parse(myJSON)
jsonp
1.用途
由于浏览器存在同源策略机制,只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而可以解决跨域的数据请求。
2.原理
1)在客户端注册一个callback, 然后把callback的名字传给服务器;
2)服务端成 json 数据;
3)服务端以 javascript 语法的方式,生成一个function , function名字就是参数jsonp中定义的名字;
4)服务端最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端;
5)客户端浏览器解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里(动态执行回调函数)。