Axios รับใน url ใช้งานได้ แต่มีพารามิเตอร์ที่สองเป็นอ็อบเจ็กต์


121

ฉันกำลังพยายามส่งคำขอ GET เป็นพารามิเตอร์ที่สอง แต่ไม่ได้ผลในขณะที่ทำเป็น url

วิธีนี้ได้ผล $ _GET ['naam'] ส่งกลับการทดสอบ:

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

แต่เมื่อฉันลองสิ่งนี้ไม่มีอะไรเลย$_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})
      })
  }
};

ทำไมฉันทำไม่ได้ ในเอกสารระบุชัดเจนว่าเป็นไปได้ ด้วย$_POSTมันไม่ได้ผลเช่นกัน

คำตอบ:


298

axios.get ยอมรับการกำหนดค่าคำขอเป็นพารามิเตอร์ที่สอง (ไม่ใช่พารามิเตอร์สตริงการสืบค้น)

คุณสามารถใช้paramsอ็อพชัน config เพื่อตั้งค่าพารามิเตอร์สตริงคิวรีดังนี้:

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

11
ฉันจะแตกไฟล์ในฝั่งเซิร์ฟเวอร์ได้อย่างไร?
มุสตาฟามามุ

1
@zero_cool คุณไม่จำเป็นต้องเข้าถึง params ที่นี่ตัวอย่างเช่นคุณสามารถเข้าถึง "foo" และจะส่งคืน "bar"
Ashutosh Raj

การแตกข้อมูลที่ฝั่งเซิร์ฟเวอร์เป็นจุดสำคัญที่นี่ฉันแน่ใจว่าคุณสามารถใช้ string foo เป็นพารามิเตอร์สำหรับวิธีการของคุณในฝั่งเซิร์ฟเวอร์ได้ แต่ฉันไม่แน่ใจว่าจะคว้าพารามิเตอร์ทั้งหมดพร้อมกันเป็นอ็อบเจกต์ภายในเมธอดฝั่งเซิร์ฟเวอร์ของคุณได้อย่างไร เบาะแสใด ๆ ? ฉันพยายามขอความช่วยเหลือจาก url นี้stackoverflow.com/questions/55602990/…
Kurkula

86

ในไคลเอนต์:

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

บนเซิร์ฟเวอร์:

function get(req, res, next) {

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

1
@danikorean เราสามารถเขียนรหัสไคลเอนต์เดียวกันโดยไม่ต้องใช้นามแฝงวิธีการร้องขอหรือไม่เช่นแทนที่จะaxios.getใช้อย่างเดียวaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1

1
รหัสเซิร์ฟเวอร์นี้ช่วยฉันได้หลายชั่วโมงขอบคุณ! สำหรับใครก็ตามที่สงสัยให้ใช้ 'params' สำหรับ. รับสายไม่ใช่ 'body' อย่างที่คุณเคยเห็นขณะค้นหา คุณสามารถตั้งชื่อใหม่ได้ทุกอย่างที่ฝั่งเซิร์ฟเวอร์หากต้องการ แต่ให้เก็บพารามิเตอร์เพื่อให้ไคลเอ็นต์ได้รับ
DORRITO

axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.