javascript - Cum să folosești corect parametrii axios cu array-uri


Cum să adaugi indici la un array în șirul de interogare?

Am încercat să trimit date astfel:

axios.get('/myController/myAction', { params: { storeIds: [1,2,3] })

Și am obținut acest URL:

http://localhost/api/myController/myAction?storeIds[]=1&storeIds[]=2&storeIds[]=3

Deci, ar trebui să obțin acest URL:

http://localhost/api/myController/myAction?storeIds[0]=1&storeIds[1]=2&storeIds[2]=3

Ce ar trebui să adaug în opțiunile mele de parametri pentru a obține acest URL?

Răspuns #1

Poți folosi paramsSerializer și să serializezi parametrii cu https://www.npmjs.com/package/qs

axios.get('/myController/myAction', {
  params: {
    storeIds: [1,2,3]
  },
  paramsSerializer: params => {
    return qs.stringify(params)
  }
})

Răspunsul #2

Acest comportament a fost adăugat în axios începând cu versiunea 1.0.0. Vezi paramsSerializer.indexes la https://github.com/axios/axios/tree/v1.0.0#request-config

Iată un exemplu folosind codul tău de exemplu:

axios.get('/myController/myAction', {
  params: { storeIds: [1,2,3] },
  paramsSerializer: {
    indexes: true, // use brackets with indexes
  }
)

Parametrii de interogare rezultanți vor avea indecși în interiorul parantezelor:

/myController/myAction?storeIds[0]=1&storeIds[1]=2&storeIds[2]=3

Alte valori paramsSerializer.indexes sunt null (fără paranteze):

axios.get('/myController/myAction', {
  params: { storeIds: [1,2,3] },
  paramsSerializer: {
    indexes: null, // no brackets at all
  }
)
// /myController/myAction?storeIds=1&storeIds=2&storeIds=3

Și valoarea implicită false (paranteze fără indici):

axios.get('/myController/myAction', {
  params: { storeIds: [1,2,3] },
  paramsSerializer: {
    indexes: false, // brackets but no indexes
  }
)
// /myController/myAction?storeIds[]=1&storeIds[]=2&storeIds[]=3

Răspunsul #3

Fără a fi nevoie să adaugi mai multe biblioteci și folosind ES6, ai putea scrie:

axios.get(`/myController/myAction?${[1,2,3].map((n, index) => `storeIds[${index}]=${n}`).join('&')}`);

Răspunsul #4

Mulțumesc foarte mult pentru răspunsul de la Nicu Criste, pentru cazul meu, API-ul necesită parametri astfel:

params: {
  f: {
    key: 'abc',
    categories: ['a','b','c']
   },
  per_page: 10
}

Metoda este GET și această API necesită ca formatul să fie: API?f[key]=abc&f[categories][]=a&f[categories][]=b... Așa că am atribuit paramsSerializer al axios astfel:

config.paramsSerializer = p => {
      return qs.stringify(p, {arrayFormat: 'brackets'})
    }
  • Instalați qs, vă rugăm să accesați acest link
  • Citește mai multe despre paramsSerializer în documentația axios
  • Editați formatul parametrilor: Citiți mai multe în documentul de stringuire qs