Vue.js中對jsonp的封裝
阿新 • • 發佈:2019-02-03
在專案中我們經常要對一些第三方介面進行跨域訪問來獲取資料,對jsonp的封裝可以加強程式碼的複用,可維護性。
code:
import JSONP from 'jsonp'
export default function jsonp(url, data, option) {
// url中可能出現沒有?的情況
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
// 使用promise方法進行回撥
return new Promise((resolve, reject) => {
JSONP(url, option, (err, data) => {
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}
// 拼接url query params
function param(data) { // data是一個物件一般只有一層
let url = ''
for (let key in data) {
// 為了防止data中值為undefined的情況
let value = data[key] !== undefined ? data[key] : ''
// 每一個鍵值對用&連線
url += `&${key}=${encodeURIComponent (value)}`
}
// 去除url中的第一個&,以免重複
return url ? url.substring(1) : ''
}