ASONP(解决跨域访问)
一,ASONP概念?
1,ASONP是什么?
JSONP是一种跨域数据交互协议,它只支持get请求; JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是数据格式,JSONP是协议。
2,为什么需要ASONP?
a,一句话,需要解决跨域数据访问的问题;
b,至于跨域(CORS)是什么,简单理解为:两个不同网络之间的访问;
c,网络之间的不同包括( (协议)protocol、port(端口,如果有指定的话)和 host(主机/域名)),还有当进行文件协议传输时,文件类型不一样也会引发跨域
3,如何实现ASONP?
b,使用 <script src='url'></script>来引入需要访问的地址,对它返回的js文件进行操作;
二,ASONP具体实现过程
1,实现流程
a,封装回调函数
b,把回调函数添加到window,作为它的方法;
c,使用 <script src='url'></script>引入目标地址;
2,JSONP的封装
1 function jsonp({
2 url, //链接地址
3 callback, //回调函数的参数名
4 fn, //回调函数
5 param, //参数
6 }){
7 //创建函数名,要随机但必须要以字母开头
8 let fnName = 'fn' + Date.now() + parseInt(Math.random()*1000);
9
10 //将函数名和函数设置为window的方法
11 window[fnName] = fn;
12 //首先创建script标签
13 let js = document.createElement('script');
14 //将回调函数名和回调函数加到url里
15 url +=`?${callback}=${fnName}`
16 //设置参数,加入到地址里
17 let paramValue = ''
18 for(let key in param){
19 paramValue += `&${key}=${param[key]}`
20 }
21 url += paramValue
22 //最后设置参数加入到script中
23 js.src = url
24 document.body.appendChild(js)
25
26 //优化,加载完成后删除
27 js.onload = function(){
28 js.remove()
29 delete window[fnName]
30 }
31 }

浙公网安备 33010602011771号