Axios get in url funziona ma con il secondo parametro come oggetto no


121

Sto cercando di inviare la richiesta GET come secondo parametro ma non funziona mentre funziona come URL.

Funziona, $ _GET ['naam'] restituisce il test:

export function saveScore(naam, score) {
  return function (dispatch) { 
    axios.get('http://****.nl/****/gebruikerOpslaan.php?naam=test')
      .then((response) => {
        dispatch({type: "SAVE_SCORE_SUCCESS", payload: response.data})
      })
      .catch((err) => {
        dispatch({type: "SAVE_SCORE_FAILURE", payload: err})
      })
  }
};

Ma quando provo questo, non c'è assolutamente nulla $_GET:

export function saveScore(naam, score) {
  return function (dispatch) { 
    axios.get('http://****.nl/****/gebruikerOpslaan.php',
    {
        password: 'pass',
        naam: naam,
        score: score
    })
      .then((response) => {
        dispatch({type: "SAVE_SCORE_SUCCESS", payload: response.data})
      })
      .catch((err) => {
        dispatch({type: "SAVE_SCORE_FAILURE", payload: err})
      })
  }
};

Perché non posso farlo? Nei documenti si dice chiaramente che è possibile. Con $_POSTesso non funziona neanche.

Risposte:


298

axios.get accetta una configurazione della richiesta come secondo parametro (non i parametri della stringa di query).

È possibile utilizzare l' paramsopzione di configurazione per impostare i parametri della stringa di query come segue:

axios.get('/api', {
  params: {
    foo: 'bar'
  }
});

11
Come lo estraggo sul lato server?
Mustafa Mamun

1
@zero_cool non è necessario accedere ai parametri, qui rispetto ad esempio è possibile accedere a "foo" e verrà restituito "bar"
Ashutosh Raj,

L'estrazione sul lato server è un punto importante qui, sono sicuro che puoi usare la stringa foo come parametro per il tuo metodo sul lato server, ma non sono sicuro di come catturare tutti i parametri contemporaneamente come oggetto all'interno del tuo metodo lato server. qualche indizio? Sto cercando di ottenere questo aiuto da questo URL stackoverflow.com/questions/55602990/...
Kurkula

86

Sul cliente:

  axios.get('/api', {
      params: {
        foo: 'bar'
      }
    });

Sul server:

function get(req, res, next) {

  let param = req.query.foo
   .....
}

1
@danikorean, possiamo scrivere lo stesso codice client senza utilizzare l'alias del metodo di richiesta, ovvero invece di axios.getutilizzare soloaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1

1
Questo codice del server mi ha fatto risparmiare ore, grazie! Per chiunque se lo chieda, attenersi a "params" per la chiamata .get e non a "body" come potresti aver visto durante la ricerca. Puoi rinominarlo qualsiasi cosa sul lato server se lo desideri, ma mantieni i parametri per il client get.
DORRITO

axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.