SOURCE

//对请求data进行格式化处理
function formateData(data) {
    let arr = [];
    for (let key in data) {
        //避免有&,=,?字符,对这些字符进行序列化
        arr.push(encodeURIComponent(key) + '=' + data[key])
    }
    return arr.join('&');
}

// {
//     url:'',
//     timer:3000,
//     jsonp:'callback',
//     success:'',
//     error:''
// }

//准备参数
//获取head dom
//创建script
//格式化数据,拼接URL
//定义全局函数请求成功后调用
//
//跨域jsonp请求
function jsonp(params) {
    //先对params进行处理,防止为空
    params = params || {};
    params.data = params.data || {};
    //后台传递数据时调用的函数名
    var callbackName = params.jsonp;
    // 拿到dom元素head,先不进行操作
    var head = document.querySelector('head');
    //创建script元素,先不进行操作
    var script = document.createElement('script');
    //传递给后台的data数据中,需要包含回调参数callback。
    //callback的值是 一个回调函数的函数名,后台通过该回调函数名调用传递数据,这个参数名的key由双方约定,默认为callback
    params.data['callback'] = callbackName;
    var data = formateData(params.data)
    let url = `${params.url}?${data}`
    params.timer = params.timer || 3000;
    var timer = null
    window[callbackName] = function(jsonData){
        head.removeChild(script)
        clearTimeout(timer)
        window[callbackName] = null;
        params.success && params.success(jsonData)
    }

    if(params.timer){
        timer = setTimeout(() => {
            head.removeChild(script)
            window[callbackName] = null; 
            params.error && params.error()
        },params.timer)
    }

    head.appendChild(script)
}

console 命令行工具 X clear

                    
>
console