Axios get in url funciona, mas com o segundo parâmetro como objeto ele não


121

Estou tentando enviar uma solicitação GET como segundo parâmetro, mas não funciona enquanto faz como url.

Isso funciona, $ _GET ['naam'] retorna o teste:

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

Mas quando tento fazer isso, não há nada em $_GETtudo:

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

Por que não posso fazer isso? Nos documentos, diz claramente que é possível. Com $_POSTele também não funciona.

Respostas:


296

axios.get aceita uma configuração de solicitação como o segundo parâmetro (não parâmetros de string de consulta).

Você pode usar a paramsopção config para definir os parâmetros da string de consulta da seguinte maneira:

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

11
Como faço para extraí-lo do lado do servidor?
Mustafa Mamun

1
@zero_cool, você não precisa acessar os parâmetros, neste exemplo você pode acessar "foo" e ele retornará "bar"
Ashutosh Raj

Extrair no lado do servidor é um ponto importante aqui, tenho certeza que você pode usar a string foo como parâmetro para seu método no lado do servidor, mas não tenho certeza de como pegar todos os parâmetros de uma vez como objeto dentro do seu método do lado do servidor. qualquer pista? Estou tentando obter essa ajuda neste url stackoverflow.com/questions/55602990/…
Kurkula

86

No cliente:

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

No servidor:

function get(req, res, next) {

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

1
@danikorean, podemos escrever o mesmo código do cliente sem usar o alias do método de solicitação, ou seja, em vez de axios.getusar apenasaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1

1
Este código de servidor me economizou horas, obrigado! Para quem está se perguntando, use 'params' para a chamada .get, e não 'body', como você pode ter visto enquanto pesquisava. Você pode renomear qualquer coisa no lado do servidor se desejar, mas mantenha os parâmetros para obter o cliente.
DORRITO

axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.