axios傳遞數(shù)組參數(shù)爬坑總結(jié)

最近做一個(gè)練手的vue項(xiàng)目,選擇axios作為網(wǎng)絡(luò)請求庫我纪。后臺一個(gè)接口使用了數(shù)組作為參數(shù)慎宾,本以為沒什么丐吓,實(shí)則遇到了一個(gè)大難題。

一開始趟据,我是這么進(jìn)行參數(shù)傳遞的:

axios.post(url,{
  ids: [1,2,3],
  type: 1
}).then((res) => {
})

好了券犁,高高興興發(fā)起請求。接下來汹碱,你可能是這樣子的:


一臉懵逼

如果你像正常的方式一樣族操,將一個(gè)數(shù)組作為一個(gè)請求參數(shù)傳遞,要么axios直接拋出連接異常比被,要么后端接口接收不到匹配的參數(shù)色难。經(jīng)過多番查詢和實(shí)驗(yàn),終于可以成功的傳遞各種數(shù)組類型的參數(shù)了等缀,總結(jié)一下正確的傳數(shù)組參數(shù)應(yīng)該如下,需要引入一個(gè)序列化的庫qs枷莉,瞅代碼:

引用
import axios from 'axios'
import qs from 'qs'
get / delete請求方式解決方式如下
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 請求方式解決方式如下
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 }))

其余類似。這樣一來尺迂,使用網(wǎng)絡(luò)請求傳遞參數(shù)的時(shí)候笤妙,數(shù)組參數(shù)就會轉(zhuǎn)換為如下的形式

url?ids=1&ids=2&ids=3
后臺接口接收

(1)后臺以數(shù)組類型(int[])接收的結(jié)果

[1,2,3]

(1)后臺以字符串形式(String)接收的結(jié)果

1,2,3

大功告成!

當(dāng)然噪裕,這只是一種形式蹲盘,大概還有4種形式,根據(jù)您的業(yè)務(wù)需求選擇一種即可:

//形式1: ids=1&ids=2&id=3
qs.stringify({ids: [1, 2, 3]}, { indices: false })

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

//形式3:ids[]=1&ids[]=2&ids[]=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘brackets‘})
 
//形式4: ids=1&ids=2&id=3
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘repeat‘}) 

最后膳音,對axios進(jìn)行了一個(gè)簡單的封裝,方便自己使用召衔,這個(gè)封裝只是一個(gè)參考,比較粗糙祭陷,哈哈苍凛,具體的可根據(jù)您的業(yè)務(wù)需求,做更加精細(xì)的封裝:

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)
}

/**
 * 請求結(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請求兵志,帶數(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請求
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)
      })
daima
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末醇蝴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子想罕,更是在濱河造成了極大的恐慌悠栓,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件按价,死亡現(xiàn)場離奇詭異惭适,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俘枫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門腥沽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸠蚪,你說我怎么就攤上這事今阳∈Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵盾舌,是天一觀的道長墓臭。 經(jīng)常有香客問我,道長妖谴,這世上最難降的妖魔是什么窿锉? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮膝舅,結(jié)果婚禮上嗡载,老公的妹妹穿的比我還像新娘。我一直安慰自己仍稀,他們只是感情好洼滚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著技潘,像睡著了一般遥巴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上享幽,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天铲掐,我揣著相機(jī)與錄音,去河邊找鬼值桩。 笑死摆霉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颠毙。 我是一名探鬼主播斯入,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛀蜜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起增蹭,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤滴某,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滋迈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎奢,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年饼灿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幕侠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碍彭,死狀恐怖晤硕,靈堂內(nèi)的尸體忽然破棺而出悼潭,到底是詐尸還是另有隱情,我是刑警寧澤舞箍,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布舰褪,位于F島的核電站,受9級特大地震影響疏橄,放射性物質(zhì)發(fā)生泄漏占拍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一捎迫、第九天 我趴在偏房一處隱蔽的房頂上張望晃酒。 院中可真熱鬧,春花似錦窄绒、人聲如沸掖疮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浊闪。三九已至,卻和暖如春螺戳,著一層夾襖步出監(jiān)牢的瞬間搁宾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工倔幼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盖腿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓损同,卻偏偏與公主長得像翩腐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子膏燃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理茂卦,服務(wù)發(fā)現(xiàn),斷路器组哩,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,962評論 6 13
  • 參考Qt之QCryptographicHash QCryptographicHash類--提供了生成密碼散列的方法...
    寒冰豌豆閱讀 1,636評論 0 0
  • 我超級萌慵懶色氣攻啊等龙,我本人也試圖往這方面發(fā)展呢(笑)
    奇_怪閱讀 134評論 0 0
  • 2018年2月2日 星期五 晴 就在下午在公園遛開心(如果你看過我前面的日記,就知到開心是何方神圣)的時(shí)候伶贰,我突然...
    福葉子閱讀 175評論 0 0