# JSONP
JSONP跨域的原理
- 使用script 标签发送请求,这个标签支持跨域访问
- 在script 标签里面给服务器端传递一个 callback
- callback 的值对应到页面一定要定义一个全局函数(为什么是全局?因为服务端接收到callback函数后会返回页面中的script中去找,如果不写在全局作用域中根本找不到)
- 服务端返回的是一个函数的调用。调用的时候会把数据作为参数包在这个函数里面。
- 因为是通过script的src请求的,请求成功后立即执行。
//动态创建script标签,并请求
function addScriptTag(src){
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.src = src;
document.body.appendChild(script);
};
//如:在onload后,跨域请求
window.onload = function(){
addScriptTag('http://127.0.0.1:8080/jsonp?callback=monkey');
};
//回调的方法,且必须为全局方法,不然会报错
function monkey(data){
alert(data);
};
Koa服务端:
const Koa = require('koa');
const koaApp = new Koa();
let allHardInfo = {}
koaApp.use(async ctx => {
const { callback } = ctx.query
ctx.body = `${callback}(${JSON.stringify(allHardInfo)})`;
});
koaApp.listen(2345);