最近在使用axios時,遇到了一個問題,就是無法正常解析返回的json數(shù)據(jù),居然出現(xiàn)了無法識別的情況,讓我非常困擾。
// 請求數(shù)據(jù) axios.get('/api/data') .then(res =>{ console.log(res.data) }) .catch(err =>{ console.log(err) })
以上是我的代碼,可以看出非常簡單,就是從后端獲取數(shù)據(jù),然后在控制臺打印出來。但是問題就在這里,當我發(fā)送請求后,返回的數(shù)據(jù)格式是符合標準的json格式,但是控制臺打印出來的卻是亂碼,無法識別。
{ "name": "張三", "age": 18, "gender": "男" ... ∟阿斯蒂芬 ... }
在搜尋了一番資料后,發(fā)現(xiàn)了原因所在,就是axios默認使用的是"Content-Type": "application/json;charset=utf-8"的數(shù)據(jù)格式請求,而我的后端返回的數(shù)據(jù)卻是gbk編碼的。這就導致了前端無法正確地解析出來。
解決方法也非常簡單,只需要在axios請求時添加"responseType": "arraybuffer"即可。
// 請求數(shù)據(jù) axios.get('/api/data', { responseType: 'arraybuffer' }) .then(res =>{ const data = iconv.decode(Buffer.from(res.data), 'gbk') console.log(JSON.parse(data)) }) .catch(err =>{ console.log(err) })
添加上上述的幾行代碼后,運行程序,可以發(fā)現(xiàn)控制臺打印出來的數(shù)據(jù)已經(jīng)可以正常識別了。完美解決了問題。