jsonp是一種跨域解決方案,它通過將數(shù)據(jù)封裝在函數(shù)調(diào)用中并動態(tài)地添加script標簽到頁面上來實現(xiàn)跨域請求數(shù)據(jù)。然而,某些情況下我們需要將jsonp轉(zhuǎn)化為json格式進行處理,這時候就需要使用axios來解決問題了。
使用axios實現(xiàn)jsonp轉(zhuǎn)json,其實只需要向服務(wù)器發(fā)送jsonp請求,然后在返回數(shù)據(jù)的函數(shù)中使用JSON.parse()來轉(zhuǎn)化為json格式即可。
// 使用axios實現(xiàn)jsonp轉(zhuǎn)化為json axios.get('/api/getData', { params: { // 參數(shù)配置 callback: 'jsonpCallback' } }).then(res =>{ // 將jsonp轉(zhuǎn)化為json const json = JSON.parse(res.data.replace('jsonpCallback(', '').replace(');', '')); console.log(json); }).catch(err =>{ console.log(err); });
在代碼中,我們首先使用axios向服務(wù)器發(fā)送了一個jsonp請求,并指定了一個參數(shù)callback來告訴服務(wù)器返回數(shù)據(jù)時,我們需要將數(shù)據(jù)封裝在一個名為jsonpCallback的函數(shù)調(diào)用中。然后,在獲取數(shù)據(jù)的操作中,使用JSON.parse()函數(shù)將數(shù)據(jù)轉(zhuǎn)化為了json格式。需要注意的是,在parse之前,我們需要對返回的數(shù)據(jù)進行一些處理,包括將函數(shù)名jsonpCallback和括號都刪除,否則解析將會失敗。
最后,我們可以通過控制臺輸出json對象來檢查是否成功解析:
{ name: "axios jsonp to json", method: "GET", data: { name: "json data", dataInfo: [ { id: 1, title: "title1", content: "content1" }, { id: 2, title: "title2", content: "content2" } ] } }
可以看到,我們已經(jīng)成功將jsonp轉(zhuǎn)化為了json格式,這在某些場景下將具有非常重要的作用。