axios 傳參數(shù)qs一些格式

qs處理url參數(shù)

qs.parse 方法可以把一段格式化的字符串轉(zhuǎn)換為對(duì)象格式娜谊,比如

let url = 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e';
let data = qs.parse(url.split('?')[1]);

// data的結(jié)果是
{
    a: 1, 
    b: 2, 
    c: '', 
    d: xxx, 
    e: ''
}

qs.stringify 則和 qs.parse 相反腰素,是把一個(gè)參數(shù)對(duì)象格式化為一個(gè)字符串裳擎。

let params = { c: 'b', a: 'd' };
qs.stringify(params)

// 結(jié)果是
'c=b&a=d'

甚至可以對(duì)格式化后的參數(shù)進(jìn)行排序:

qs.stringify(params, (a,b) => a.localeCompare(b))

// 結(jié)果是
'a=b&c=d'

指定數(shù)組編碼格式

let params = [1, 2, 3];

// indices(默認(rèn))
qs.stringify({a: params}, {
    arrayFormat: 'indices'
})
// 結(jié)果是
'a[0]=1&a[1]=2&a[2]=3'

// brackets 
qs.stringify({a: params}, {
    arrayFormat: 'brackets'
})
// 結(jié)果是
'a[]=1&a[]=2&a[]=3'

// repeat
qs.stringify({a: params}, {
    arrayFormat: 'repeat'
})
// 結(jié)果是
'a=1&a=2&a=3'

處理json格式的參數(shù)
在默認(rèn)情況下,json格式的參數(shù)會(huì)用 [] 方式編碼劳较,

let json = { a: { b: { c: 'd', e: 'f' } } };

qs.stringify(json);
//結(jié)果 'a[b][c]=d&a[b][e]=f'

但是某些服務(wù)端框架旧困,并不能很好的處理這種格式,所以需要轉(zhuǎn)為下面的格式

qs.stringify(json, {allowDots: true});
//結(jié)果 'a.b.c=d&a.b.e=f'

引用:https://www.cnblogs.com/small-coder/p/9115972.html
需要注意的是:與JSON.stringify()的區(qū)別

    如:JSON.stringify({"a": "1", "b": "2"})        結(jié)果為:'{"a": "1", "b": "2"}'

           而qs.stringify({"a": "1", "b": "2"})            結(jié)果為:'a=1&b=2'

axios傳遞數(shù)組參數(shù)

get / delete請(qǐng)求方式解決方式如下

axios.get(url, {
    params: {
     ids: [1,2,3],
     type: 1
    },
    paramsSerializer: params => {
      return qs.stringify(params, { indices: false })
    }})

axios.delete(url, {
     params: {
     ids: [1,2,3],
     type: 1
    },
    paramsSerializer: params => {
      return qs.stringify(params, { indices: false })
    }})

post / put 請(qǐng)求方式解決方式如下

axios.post(url, qs.stringify(
    params: {
     ids: [1,2,3],
     type: 1
    }, { indices: false }))

 axios.put(url, qs.stringify(params: {
     ids: [1,2,3],
     type: 1
    }, { indices: false }))

url結(jié)果:

url?ids=1&ids=2&id=3
qs.stringify({ids: [1, 2, 3]}, { indices: false })
 //形式: ids=1&ids=2&id=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘indices‘})
 //形式: ids[0]=1&aids1]=2&ids[2]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘brackets‘})
 //形式:ids[]=1&ids[]=2&ids[]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘repeat‘}) 
//形式: ids=1&ids=2&id=3

最后循捺,對(duì)axios進(jìn)行了一個(gè)封裝,方便自己使用:

import axios from 'axios'
import qs from 'qs'

let baseurl = 'http://localhost:8081/api'
function getRequest (apiPath, params, successCallback, errorCallback) {
  let url = baseurl + apiPath
 let req = axios.get(url, {
    params: params,
    paramsSerializer: params => {
      return qs.stringify(params, { indices: false })
    }})
  thenResponse(req, successCallback, errorCallback)
}
function postRequest (apiPath, params, successCallback, errorCallback) {
  let url = baseurl + apiPath
  let req = axios.post(url, qs.stringify(params, { indices: false }))
  thenResponse(req, successCallback, errorCallback)
}

function putRequest (apiPath, params, successCallback, errorCallback) {
  let url = baseurl + apiPath
  // var params = new URLSearchParams()
  // params.append('status', 0)
  let req = axios.put(url, qs.stringify(params, { indices: false }))
  thenResponse(req, successCallback, errorCallback)
}

function deleteRequest (apiPath, params, successCallback, errorCallback) {
  let url = baseurl + apiPath
  let req = axios.delete(url, {
    params: params,
    paramsSerializer: params => {
      return qs.stringify(params, { indices: false })
    }})
  thenResponse(req, successCallback, errorCallback)
}

/**
 * 請(qǐng)求結(jié)果處理
 * @param axiosRequest
 * @param successCallback
 * @param errorCallback
 */
function thenResponse (axiosRequest, successCallback, errorCallback) {
  axiosRequest.then((res) => {
    if (res.status === 200) {
      res = res.data
      if (res.code === 0) {
        if (successCallback) successCallback(res)
      } else {
        if (errorCallback) errorCallback(res.code, res.msg)
      }
    }
  }).catch((error) => {
    if (errorCallback) errorCallback(-1, error.message)
  })
}
export { getRequest, postRequest, putRequest, deleteRequest }
//導(dǎo)入封裝axios的js文件
import {getRequest, deleteRequest} from 'utils/api'
//發(fā)送delete請(qǐng)求斩例,帶數(shù)組參數(shù) 與 普通參數(shù)
deleteRequest('/admin/user/del', {
        token: ‘SDFSDIFJSIODFKMSDOFM,SDOPFK’,
        ids: [1,2,3,4,5,6]
      }, function (res) {
        _this.$alert('刪除成功')
      }, function (errcode, errmsg) {
        _this.$alert('code ' + errcode + ' ,meaasge ' + errmsg)
      })
//發(fā)送GET請(qǐng)求
getRequest('/admin/users', {
        status: 0,
        pageNum: this.currentPage,
        pageSize: count,
        token: '111'
      }, function (res) {
        _this.totalPage = res.data.total
      }, function (errcode, errmsg) {
        _this.$alert('code ' + errcode + ' ,meaasge ' + errmsg)
      })

引用:http://www.reibang.com/p/68d81da4e1ad

格式1

let  params =  {
    points: [ 
        { lat: 111, lng: 222 }
    ]
};
params = qs.stringify(params); //序列化
image.png

格式2

qs.stringify(params, { arrayFormat: 'indices', allowDots: true })
image.png

格式3 (傳數(shù)組)

image.png

image.png

image.png

修改后
image.png

image.png

image.png

引用:https://blog.csdn.net/weixin_41013537/article/details/89886220

axios 下載文件 設(shè)置 responseType: 'blob' 把文件轉(zhuǎn)化為文件流

axios.get({
    url: 'xxxxxx',
    method: 'get',
    data:{},
    responseType: 'blob'
}).then(res => {
       console.log(res);
    });

參考:https://blog.csdn.net/dongguan_123/article/details/100183284

//formdata格式的post請(qǐng)求
const formData = (url,data) => {
    let formData = qs.stringify(data);
    return service.post(url,formData,{
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).then(res => res.data).catch(err => err);
}
//文件上傳
const upLoading = (url,data) => {
    let formData = new FormData();
    Object.keys(data).forEach(key => {
        formData.append(key,data[key])
    })
    return service.post(url,formData,{
        headers: {'Content-Type': 'multipart/form-data'}
    }).then(res => res.data).catch(err => err);
}
//文件下載
const fileDownload = (url,params) => service.get(url,{params,responseType: 'blob'}).then(res => res.data).catch(err => err);

const fileDownloadName = (url,params) => service.get(url,{params,responseType: 'blob'}).then(res => res).catch(err => err);

const fileDownloadPost = (url,params) => service.post(url,params,{responseType: "blob" }).then(res => res).catch(err => err);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市从橘,隨后出現(xiàn)的幾起案子念赶,更是在濱河造成了極大的恐慌,老刑警劉巖恰力,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉谜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踩萎,警方通過查閱死者的電腦和手機(jī)停局,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來香府,“玉大人董栽,你說我怎么就攤上這事∑蠛ⅲ” “怎么了锭碳?”我有些...
    開封第一講書人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勿璃。 經(jīng)常有香客問我擒抛,道長(zhǎng),這世上最難降的妖魔是什么补疑? 我笑而不...
    開封第一講書人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任歧沪,我火速辦了婚禮,結(jié)果婚禮上莲组,老公的妹妹穿的比我還像新娘诊胞。我一直安慰自己,他們只是感情好胁编,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開白布厢钧。 她就那樣靜靜地躺著,像睡著了一般嬉橙。 火紅的嫁衣襯著肌膚如雪早直。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評(píng)論 1 308
  • 那天市框,我揣著相機(jī)與錄音霞扬,去河邊找鬼。 笑死枫振,一個(gè)胖子當(dāng)著我的面吹牛喻圃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粪滤,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼斧拍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了杖小?” 一聲冷哼從身側(cè)響起肆汹,我...
    開封第一講書人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎予权,沒想到半個(gè)月后昂勉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扫腺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年岗照,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笆环。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡攒至,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出躁劣,到底是詐尸還是另有隱情嗓袱,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布习绢,位于F島的核電站渠抹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏闪萄。R本人自食惡果不足惜梧却,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望败去。 院中可真熱鬧放航,春花似錦、人聲如沸圆裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赊时,卻和暖如春吨铸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祖秒。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工诞吱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竭缝。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓房维,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親抬纸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咙俩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359