轉載
import { JSONP } from './JSONP'
// 調用
JSONP({
url: 'url',
data: {
key1: 'key1'
},
callback (data) {
// data 是服務端返回的數(shù)據(jù)
}
})
// JSONP.js
let JSONP = (config = {}) => {
let { data, url, callback } = config
// 拼接請求Url
if (!url) throw new Error('url is required!')
let name = `id_${(new Date()).getTime()}_${Math.random().toString().substr(2)}`
let srcUrl = getSrcUrl(url, {
data,
callback: name
})
// 插入Script標簽
let script = document.createElement('script')
script.type = 'text/javascript'
script.src = srcUrl
script.id = name
// CallBack 放到 window 對象,調用后銷毀
window[name] = function (json) {
// 執(zhí)行這個函數(shù)后藕夫,要銷毀這個函數(shù)
window[name] = undefined
// 獲取這個script的元素
var elem = document.getElementById(name)
// 刪除head里面插入的script孽糖,這三步都是為了不影響污染整個DOM啊
removeElem(elem)
// 執(zhí)行傳入的的函數(shù)
callback && typeof callback === 'function' && callback(json)
}
var head = document.getElementsByTagName('head')
if (head && head[0]) {
head[0].appendChild(script)
}
}
let getSrcUrl = (url, data) => {
let _url = url + (url.indexOf('?') === -1 ? '?' : '&')
let ret = ''
if (typeof data === 'string') {
ret = data
} else if (typeof data === 'object') {
for (let key in data) {
ret += '&' + key + '=' + encodeURIComponent(data[key])
}
}
ret = ret.substr(1)
return _url + ret
}
let removeElem = (elem) => {
let parent = elem.parentNode
if (parent && parent.nodeType !== 11) {
parent.removeChild(elem)
}
}
export default JSONP
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者