原生js使用jsonp

2,101 阅读1分钟
/*
封装一个jsonp方法,可以使用如下方式调用:
jsonp(url,[,data],[,callbackName])
*/
jsonp('xxxurl',
{page:1,'jsonpCallback')
.then(data => {
console.log(data);
})

function jsonp(url,data,callback){
     return new Promise((resolve, reject) => {
        let _url = url + '?page=' + data.page + '&callback='+callback;  //一定要有一个回调函数
        const callbackName = callback;
        let head = document.getElementsByTagName('head')[0];
        //设置传递给后台的回调参数名
        let script = document.createElement('script');
        head.appendChild(script);
        //创建jsonp回调函数
        window[callbackName] = json =>{
            resolve(json)
            head.removeChild(script);
            clearTimeout(script.timer);
            window[callbackName] = null;
        }
        //发送请求
        script.src = _url;
     })
};