1. jsonp的实现原理:
//利用script的src属性 src=url+'?'+参数+callback
/**
* @param {url} url请求地址
* @param {data} data请求参数
* @param {success} 回调函数
**/
2. 将对象转换成查询字符串
function paramsObj(data) {
var arr = []
// k是属性 data是数组
for (var k in data) {
// data[k]数组中相对应的属性值
arr.push(k + '=' + data[k])
}
return arr.join('&') // 将数组转成字符串并以&分隔
}
3. 定义 myJsonp 函数
function myJsonp(options) {
// 1. 动态创建script标签
var script = document.createElement('script')
// 将数据对象转换成查询字符串
options.data = paramsObj(options.data)
// 1.1 动态创建函数名字 Math.random() 生成随机数 toString()转为字符串 substr(2) 进行字符串的截取
var fnName = 'myJsonp' + Math.random().toString().substr(2)
// 1.3**** 将函数名动态的添加到全局里面
// window[fnNanme] window里面的对象
window[fnName] = function (res) {
// 1.5 接收数据结束后删除script标签
document.head.removeChild(script)
delete window[fnName]
// 1.4 回调 options.success 函数
options.success && options.success(res)
}
4. 给src属性设置值
script.src = options.url + '?' + options.data + '&callback' + fnName;
document.head.appendChild(script)
}
网友评论