导读
为了弥补AJAX无法跨域的问题,JSONP应运而生。不过JSONP并不是唯一跨域的技术,更新的有CORS技术。
简介
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方法。JSONP看起来和JSON差不多,只不过是被包含在函数调用中的JSON,就像下面这样。callback({ "name": "real"})
。下面分别来谈谈JSON和JSONP。
JSON
JSON的优点
- JSON是一种数据格式。
- 基于纯文本,跨平台不是问题。
- JavaScript原生支持。JSON是JavaScript的一个严格的子集,利用了JavaScript中的一些模式(对象、数组等)来表示结构化数据。
- 经过合理的排版后可读性较强,XML过于繁琐、冗长。
- 容易编写和解析(JSON.stringify、JSON.parse),前提是要知道格式。
JSON数据的规则
JSON的语法可以表示为以下三种类型的值。
1、简单值:字符串,数值,布尔值,null。但不支持undefined。如:5,”hello”,false。值得注意的是:JSON字符串必须使用双引号(单引号会导致语法错误)。
2、对象:”{}/Object”。对象是一种复杂数据类型。是一组无序的键值对。而每个键值对中的值可以使简单值(字符串),也可以是复杂数据类型(数组,对象)。
{
"name": "real",
"age": 20,
"friends": ["Laki", "Sonny"]
}
3、数组: “Array”。数组也是一种复杂数据类型,表示有序的值列表。其中数组中的值可以是简单数据类型(字符串),也可以复杂数据类型(数组、对象)。
[
{
"name": "Laki",
"age": "21"
},
{
"name": "Sonny",
"age": "22",
"friens": [ "real", "Laki" ]
}
]
对于日期类型:
var day = {
date: new Date( 2016, 10, 2 )
}
var jsonDay = JSON.stringify( day );// 转换为JSON格式
/* 解析 */
var day2 = JSON.parse( jsonDay, function ( key, value) {
if ( key === "date" ) {
return new Date( value );
} else {
return value;
}
})
是的,JSON.stringify()有三个参数,JSON.parse()有两个参数。只不过我们平常只用第一个。详细的可以参考其他资料。
JSONP
1、JSONP是为了解决跨域问题产生的,为了弥补AJAX的不足。AJAX请求跨域资源,Chrome下会报错:
X