實(shí)現(xiàn)一個(gè)jsonp函數(shù)份企,僅需要支持jsonp(url)一種調(diào)用方式即可(僅有url一個(gè)傳參),例如: jsonp('//t.alicdn.com/t/gettime?callback=cb').then(result=>console.dir(result))
//需使用promise
function jsonp(url) {
//在這里書(shū)寫(xiě)代碼
return new Promise((resolve, reject) => {
let callbackName = `${url.split("?")[1].split("=")[1]}${Date.now()}`
url = url.split("?")[0] + `?${url.split("?")[1]}${Date.now()}`
let script = document.createElement('script')
script.src = url
window[callbackName] = (res) => {
delete window[callbackName]
document.body.removeChild(script)
if (res) {
resolve(res)
} else {
reject('沒(méi)有返回?cái)?shù)據(jù)')
}
}
script.addEventListener('error', () => {
delete window[callbackName]
document.body.removeChild(script)
reject('script資源加載失敗')
}, false)
document.getElementsByTagName("body")[0].appendChild(script)
})
}
//調(diào)用
jsonp('//t.alicdn.com/t/gettime?callback=cb').then(result=>console.dir(result))