-
跨域简单的来说限制了非同源(ip/域名/端口/协议)的数据交互,当然这肯定是极好的,因为如果不限制那么你的网页别人也可以操作是不是很恐怖
-
但是有些情况下我们需要调用别人的服务器数据,而且别人也愿意怎么办呢,程序员是很聪明的,html标签中img,script,link等一些带有src属性的标签是可以请求外部资源的,img和link得到的数据是不可用的,只有script标签请求的数据我们可以通过函数来接收,函数的参数传递可以是任何类型,所以创建一个函数,来接收,参数就是请求到的数据,而对方的数据也要用该函数来调用就可以实现跨域了
-
简单封装jsonp实现
// url是请求的接口
// params是传递的参数
// fn是回调函数
function jsonp(url, params, fn){
// cbName实现给url加上哈希,防止同一个地址请求出现缓存
var cbName = `jsonp_${(Math.random() * Math.random()).toString().substr(2)}`;
window[cbName] = function (data) {
fn(data);
// 获取数据后移除script标签
window.document.body.removeChild(scriptElement);
};
// 组合最终请求的url地址
var querystring = '';
for (var key in params) {
querystring += `${key}=${params[key]}&`;
}
// 告诉服务端我的回调叫什么
querystring += `callback=${cbName}`;
url = `${url}?${querystring}`;
// 创建一个script标签,并将src设置为url地址
var scriptElement = window.document.createElement('script');
scriptElement.src = url;
// appendChild(执行)
window.document.body.appendChild(scriptElement);
}
