Promise 封装 jsonp

这里写一个 Promise 封装 jsonp 请求到 QQ 音乐数据的 demo。

function param(data) {
        let url = ''
        for (var k in data) {
            let value = data[k] !== undefined ? data[k] : ''
            url += '&' + k + '=' + encodeURIComponent(value)
        }
        return url ? url.substring(1) : ''
    }

    var url = 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg';

    const data = {
        platform: 'h5',
        uin: 0,
        needNewCode: 1
    }

    url += (url.indexOf('?') < 0 ? '?' : '&') + param(data);

    function p(url) {
        let json;
        let s = document.createElement('script');
        s.src = url + '&jsonpCallback=fn';

        window.fn = function(data) {
            json = data;
        }
        //当script被插入文档中时,src中的资源就会开始加载
        document.body.appendChild(s);

        return new Promise((resolve, reject) => {
         
            s.onload = function(e) {
                resolve(json);
            }
            s.onerror = function() {
                reject(json);
            }
        });
    }

    p(url).then(data => {
        console.log(data);
    }).catch(err => {
        console.log(err)
    });

jsfiddle在线演示地址


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,241评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,335评论 25 708
  • 你问我,有没有为你做过些什么 我十分遗憾的低下了头 细细想来,在这么长的时间里 我竟然真的没有为你做过些什么 很遗...
    朔风萧客阅读 470评论 0 2
  • 跟着感觉生活。自然而瘦的人过着真正圆满的生活(这并不是因为他们瘦)。瘦是他们生活体验的一部分,而非他们满足感的源泉...
    邓纯子阅读 127评论 0 1
  • 30秒法则又称电梯法则,其有特点是:快短近。这不仅仅使用与商业上,也可以用于与人的沟通上。 大多数人在与别人打交道...
    豪小阅读 341评论 0 1