JSONP 通过动态创建script标签可以跨域的原理,利用回调函数来执行处理数据的行为,
是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback 或者开始就定义一个回调方法,参数给服务端,然后服务端返回数据时会将这个callback 参数作为函数名来包裹住 JSON 数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
JSONP 和 JSON 的区别: JSON 是一种传输格式,而 JSONP 呢是一种数据的获取方式。其实他们没什么相关性, JSONP 可以跨域,JSONP只支持GET方式请求不支持。POST。
JSONP漏洞点主要有:callback参数注入、资源访问授权设置!同时他只支持get方式的请求
script请求返回JSON实际上是脚本注入。它虽然解决了跨域问题,但它不是万能的。
1,不能接受HTTP状态码
2,不能使用POST提交(默认GET)
3,不能发送和接受HTTP头
4,不能设置同步调用(默认异步)
<script>
function callback_fn(data){
console.log("callback_fn");
console.log(data);
}
$.ajax({
type:"get",
dataType:"jsonp",
url:"http://sax.sina.com.cn/newimpress?adunitid=PDPS000000047325&rotate_count=36",
jsonpCallback:"callback_fn",
success:function(data){
console.log("success");
console.log(data);
}
});
</script>
<script>
/*1.动态创建script标签*/
var script = document.createElement('script');
/*2.动态创建回调函数*/
var success = function(data){
console.log(data);
}
/*3.设置接口地址为script标签的src并且加上回调函数的名称*/
script.src = "http://api.study.com/01jsonp.php?callback=success";
/*4.追加到html文档当中*/
document.body.appendChild(script);
</script>