1. 实现

      1. function jsonp(url, params = {}, cbName, cb) {
      2. params.callback = cbName;
      3. window[cbName] = cb;
      4. const keys = Object.keys(params);
      5. const paramStr = keys.map(key => `${key}=${params[key]}`).join('&');
      6. const script = document.createElement('script');
      7. script.setAttribute('src', `${url}?${paramStr}`);
      8. documnet.appendChild(script);
      9. }
    2. 调用方式

    1. jsonp(
    2. 'http://test.com',
    3. { name: 'lin' },
    4. 'cb',
    5. function(ret) {
    6. console.log(ret);
    7. }
    8. )
    1. 优缺点

    优点:

    • 实现简单
    • 兼容性非常好

    缺点:

    • 只支持get请求(因为<script>标签只能 get )
    • 有安全性问题,容易遭受 xss 攻击
    • 需要服务端配合 jsonp 进行一定程度的改造