实现
function jsonp(url, params = {}, cbName, cb) {
params.callback = cbName;
window[cbName] = cb;
const keys = Object.keys(params);
const paramStr = keys.map(key => `${key}=${params[key]}`).join('&');
const script = document.createElement('script');
script.setAttribute('src', `${url}?${paramStr}`);
documnet.appendChild(script);
}
调用方式
jsonp(
'http://test.com',
{ name: 'lin' },
'cb',
function(ret) {
console.log(ret);
}
)
- 优缺点
优点:
- 实现简单
- 兼容性非常好
缺点:
- 只支持get请求(因为
<script>
标签只能 get ) - 有安全性问题,容易遭受 xss 攻击
- 需要服务端配合 jsonp 进行一定程度的改造