Axios get in url działa, ale z drugim parametrem jako obiektem nie działa


121

Próbuję wysłać żądanie GET jako drugi parametr, ale nie działa, gdy działa jako adres URL.

To działa, $ _GET ['naam'] zwraca 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})
      })
  }
};

Ale kiedy próbuję tego, w ogóle nic nie ma $_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})
      })
  }
};

Dlaczego nie mogę tego zrobić? W dokumentach jasno mówi się, że jest to możliwe. Z $_POSTtym też nie działa.

Odpowiedzi:


298

axios.get akceptuje konfigurację żądania jako drugi parametr (nie parametry ciągu zapytania).

Możesz użyć paramsopcji config, aby ustawić parametry ciągu zapytania w następujący sposób:

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

11
Jak wyodrębnić go po stronie serwera?
Mustafa Mamun

1
@zero_cool nie musisz mieć dostępu do parametrów, tutaj przykład w ramach przykładu możesz uzyskać dostęp do „foo” i zwróci „bar”
Ashutosh Raj

Wyodrębnianie po stronie serwera jest tutaj ważną kwestią, jestem pewien, że możesz użyć ciągu foo jako parametru dla swojej metody po stronie serwera, ale nie jestem pewien, jak pobrać wszystkie parametry naraz jako obiekt wewnątrz metody po stronie serwera. jakaś wskazówka? Próbuję uzyskać pomoc z tego
adresu

86

Na kliencie:

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

Na serwerze:

function get(req, res, next) {

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

1
@danikorean, czy możemy napisać ten sam kod klienta bez użycia aliasu metody żądania, czyli zamiast axios.getużywać tylkoaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1

1
Ten kod serwera zaoszczędził mi wiele godzin, dziękuję! Dla każdego, kto się zastanawia, trzymaj się „params” dla połączenia .get, a nie „body”, jak mogłeś zauważyć podczas wyszukiwania. Jeśli chcesz, możesz zmienić dowolną nazwę po stronie serwera, ale zachowaj parametry dla klienta.
DORRITO

axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.