提及jsonp就不可避免提到一个问题,那就是跨域。
跨域是指不符合同源策略;
同源策略:
(1)协议相同;
(2)端口号相同;
(3)域名相同;
解决跨域一般有两种方法;
(1)在后台代码设置
header("Access-Control-Allow-Origin:*");
这样是通知浏览器不要阻止跨域请求,但是很不安全;
(2)使用jsonp请求
jsonp的原理;
动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
Jsonp的执行过程如下:
①首先在客户端自定义一个函数 (如:functiongetName(data){console.log(data)})
②然后动态创建一个script标签,src指向其他域名下的api,当script标签创建完成,就会根据api接口去请求数据,返回的数据格式类似getName({'name':'xiaoming'})。
③返回的数据格式,其实是一个方法调用,所以就会调用在第一步自定义的函数,同时传入参数。
④每次jsonp请求,都需要动态创建一个script标签,防止标签变多,需要在script标签onload完成后,删除我们刚刚创建的script标签。ps:1.jsonp与ajax没有任何关系
2.jsonp需要后台与前端进行配合才能完成。
json数据的应用;
JSON 是一种轻量级的数据交换格式。
JSON 独立于语言和平台,JSON 解析器和JSON 库支持许多不同的编程语言。
JS 字面量对象 转成 json 字符串
var
arr = [1,2,3, { a : 1 } ];
JSON.stringify( arr );
字符串解析成 JSON
var
str =
'[1,2,3,{"a":1}]'
;
JSON.parse( str );
PHP面量对象 转成 json 字符串
$arr
=
array
(
'name'
=>
'hehe'
);
echo
json_encode(
$arr
);