//对请求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