Axios: Tidak dapat POST data di aksio

Dibuat pada 21 Nov 2017  ·  62Komentar  ·  Sumber: axios/axios

Saya menggunakan kode ini untuk POST data ke Web API
parameter var = {
argumen: {
myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'
}
};

aksio({
metode: 'posting',
url: 'api/Aplikasi/Aksi/MyWebAPIMethod',
data: JSON.stringify(param),
});

dan kode API Web saya seperti ini:
kelas publik MyClassVM
{
string publik myStringVal { dapatkan; mengatur; }
}
pesan publik VMMyWebAPIMethod(MyClassVM args){
// kode saya ada di sini
}

Masalahnya adalah: Ketika saya melewati myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3' itu memberi saya null di Web API [args.myStringVal = null ].

Bagaimana saya bisa meneruskan nilai di axios POST.

Terima kasih sebelumnya

Komentar yang paling membantu

Saya baru-baru ini mulai beralih dari menggunakan jQuery untuk pekerjaan AJAX ke Axios, hanya karena tampaknya menjadi hal yang populer. Tetapi saya terkejut mengetahui bahwa saya tidak dapat melakukan POST sederhana.

Jadi, inilah yang pertama kali saya coba:

axios.post('/api/event/item', {
    event_id: eventId,
    item_id: itemId,
    description: description
  })
  .catch(function (error) {
    console.log(error);
  });

Di backend (menggunakan PHP) $_POST benar-benar kosong. Jadi saya melakukan beberapa googling, dan ini berhasil (dengan menggunakan polyfill, menghela nafas):

const params = new URLSearchParams();
params.append('event_id', eventId);
params.append('item_id', itemId);
params.append('description', description);
axios({
  method: 'post',
  url: '/api/event/item',
  data: params
});

Ini bekerja. Jadi saya perlu menggunakan URLSearchParams ? Nah ini membuat frustrasi karena dokumen menunjukkan bahwa metode pertama seharusnya berhasil.

Adakah orang lain yang mengalami masalah ini?

Semua 62 komentar

@awais-ilyas , saya tidak berpikir Anda biasanya akan merangkai muatan POST. Coba ini:

...
axios({
method: 'post',
url: 'api/Application/Action/MyWebAPIMethod',
data: args,
});
...

Yang harus mengatur data di badan POST.

Saya baru-baru ini mulai beralih dari menggunakan jQuery untuk pekerjaan AJAX ke Axios, hanya karena tampaknya menjadi hal yang populer. Tetapi saya terkejut mengetahui bahwa saya tidak dapat melakukan POST sederhana.

Jadi, inilah yang pertama kali saya coba:

axios.post('/api/event/item', {
    event_id: eventId,
    item_id: itemId,
    description: description
  })
  .catch(function (error) {
    console.log(error);
  });

Di backend (menggunakan PHP) $_POST benar-benar kosong. Jadi saya melakukan beberapa googling, dan ini berhasil (dengan menggunakan polyfill, menghela nafas):

const params = new URLSearchParams();
params.append('event_id', eventId);
params.append('item_id', itemId);
params.append('description', description);
axios({
  method: 'post',
  url: '/api/event/item',
  data: params
});

Ini bekerja. Jadi saya perlu menggunakan URLSearchParams ? Nah ini membuat frustrasi karena dokumen menunjukkan bahwa metode pertama seharusnya berhasil.

Adakah orang lain yang mengalami masalah ini?

@dlgoodchild Apakah Anda mencoba mengirimnya sebagai data Formulir? Saya menemukan tubuh POST saya juga kosong, tetapi saya harus menggunakan ini untuk mengubahnya menjadi sesuatu seperti Bentuk:

   ...
      data: params,
      transformRequest: [
        function(data, headers) {
          const serializedData = []

          for (const k in data) {
            if (data[k]) {
              serializedData.push(`${k}=${encodeURIComponent(data[k])}`)
            }
          }

          return serializedData.join('&')
        }
      ],
   ...

Setuju, fungsi POST perlu bekerja.

Ahh pendekatan yang bagus! Untuk manfaat siapa pun yang mendarat di sini, pada akhirnya saya membuatnya berfungsi dalam 3 varian:

  1. FormulirData
  2. URLSearchParams
  3. querystring.stringify (bagian dari Node)

Masalah dengan 2 opsi pertama adalah kompatibilitas browser (periksa dengan caniuse.com). Yang terakhir adalah ketergantungan lain.

Saya tidak mengetahui opsi transformRequest , ini terlihat bagus dan merupakan opsi yang bagus jika Anda ingin meminimalkan ketergantungan dan bekerja lintas browser terutama untuk versi yang lebih lama.

Saya pikir dokumentasi inilah yang membuat Axios frustasi bagi banyak orang. Jumlah pertanyaan StackOverflow yang berkaitan dengan POST menggunakan Axios adalah indikasi yang baik bahwa ada masalah di suatu tempat dan kesalahpahaman umum.

Punya masalah yang sama - menghabiskan beberapa jam untuk penelitian, akhirnya menemukan masalah ini. Pikiran: POST seharusnya tidak rumit, dan tidak memerlukan dependensi atau konfigurasi tambahan. Ini terasa seperti AngularJS 1 lagi. Saya akan meneruskan menggunakan perpustakaan ini untuk saat ini.

@yuri-wisestamp sangat setuju, ini adalah pilihan desain yang sangat aneh/tidak biasa. Saya sebagian besar berhenti menggunakannya sekarang karena saya merasa ditolak oleh jam-jam saya kehilangan debugging karena kurangnya dokumentasi yang baik untuk meletakkan ini sejak awal.

Posting dengan Axios dan PHP benar-benar mimpi buruk!

Saya menghabiskan dua jam, tanpa hasil apa pun ...

Postingan yang tidak dikodekan dalam bentuk tidak mengisi $_POST di PHP. Anda harus membaca isi posting:

$body = file_get_contents('php://input');

jika Anda mengharapkan json:

$json=json_decode($body);

kode ini:

axios = require('axios');

var param = {
   args: {
      myStringVal: '979251e4-6c9f-460d-ba32-1b6fe58ce8a3'
   }
};

axios({
   method: 'post',
   url: 'http://home.test/post.php',
   data: param,
});

Terhadap ini di server:

<?php

$entityBody = file_get_contents('php://input');

file_put_contents(__DIR__ . '/output.txt', print_r(json_decode($entityBody), true));

Menghasilkan output ini:

stdClass Object
(
    [args] => stdClass Object
        (
            [myStringVal] => 979251e4-6c9f-460d-ba32-1b6fe58ce8a3
        )

)

Saya memperbaiki masalah saya seperti itu:

Depan

userSearchParams() tidak berfungsi di mana-mana ( https://caniuse.com/#search =URLSearchParams() )

        let params = new URLSearchParams();
        params.append('email', this.email );
        params.append('url', userInfo.url );
        this.$http.post(
          'http://localhost:9999/api/record.php', params
          )
        .then((response) => {
          if (response.data.message === "success" )  this.$router.push( 'thankyou' );
        })
        .catch( (error) =>   console.log(error) ) ;

Kembali

print_r( $_POST ); 

// $_POST['email'] = '[email protected]'
// $_POST['url'] = 'http://google.fr'

Saya membuat milik saya berfungsi dengan menginstal qs.

          import qs from "qs";


        const params = {
            name: "User",
            startTime: "2:00PM",
            endTime: "3:00PM",
            status: "pending",
            invitation: "test",
        };

        axios.post("DOMAIN/event/new", qs.stringify(params))
            .then((response) => {
                console.log(response);
            })
            .catch((error) => {
                console.log(error);
            });

@Legym Terima kasih! Saya membuat milik saya bekerja juga dengan qs.stringify! Sial, saya hampir berhenti menggunakan axios karena saya tidak bisa membuat permintaan POST saya berfungsi dengan benar!

Terimakasih banyak!

Saya benar-benar menemukan solusi yang lebih baik tanpa perlu perpustakaan eksternal. Header permintaan Posting diatur ke formulir. Anda harus mengubah tajuk jika Anda mengirim objek JSON

        const params = {
            name: "User",
            startTime: "2:00PM",
            endTime: "3:00PM",
            status: "pending",
            invitation: "test",
        };

axios.post('DOMAIN/event/new', params, {
     headers: {
          'content-type': 'application/json',
     },
})

@Legym Terima kasih banyak!

Saya benar-benar tidak mengerti mengapa POST tidak berfungsi. Header Legym tidak memperbaikinya untuk saya.
jquery berhasil coba dulu jadi saya tidak tahu apa yang terjadi.

Pendekatan URLSearchParams tidak berfungsi untuk Safari di macOS.

Adakah yang bisa POST file dan data melalui axios?
Saya menggunakan kerangka kerja Laravel PHP.

@latanoil jujur, ada sedikit atau tidak ada keuntungan menggunakan axios. Yang terbaik adalah tetap menggunakan perpustakaan Ajax yang lebih sederhana, didukung lebih baik, dan terdokumentasi dengan lebih baik. Jquery dicoba dan diuji dan bekerja dengan sangat baik dan Anda tidak akan menemukan masalah apa pun di sini.

Terima kasih @dlgoodchild atas sarannya. Saya telah berjuang dengan ini selama beberapa hari sekarang. Saya hanya akan tetap menggunakan jQuery.

axios({
  method: 'post',
  url: 'http://blahblahblah',
  params: {
    key1: value1,
    key2: value2
  }
})

bekerja dengan cara ini, gunakan _params_, bukan _data_

LOL Saya tidak percaya ini sangat sulit untuk bekerja.

Sesuatu _ini_ dasar, _ini_ ... _umum_, TIDAK harus sulit.

@HellsingMatt tidak tidak bekerja untuk saya. Mungkin Anda bingung dengan $_GET. Karena 'params' adalah yang saya gunakan untuk membuatnya berfungsi untuk GET. Tapi itu tidak berhasil untuk saya dengan POST.

@mallochine menarik, saya menggunakan _params_ dengan POST di node.js

@HellsingMatt oke. Saya menggunakan PHP. Sepertinya axios benar-benar kacau dengan PHP. Apakah Anda menggunakan backend PHP?

@mallochine belum pernah belajar PHP, semua backend saya menggunakan node.js

Saya menggunakan PHP. Tidak ada masalah.
Dalam beberapa kasus saya ingin json (biasanya), jadi saya mengatur header yang sesuai. Dalam kasus di mana saya ingin $_POST diisi, saya menggunakan perpustakaan seperti qs atau implementasi saya yang lebih kecil dan lebih sederhana (yang tidak akan menangani semua kasus tetapi cukup bagi saya) untuk mengonversi ke string kueri.

Lihat posting SO ini untuk contoh pada satu fungsi tersebut: https://stackoverflow.com/a/1714899/6728516

Kekhasan Axios ini telah dibahas dalam dokumentasi utama untuk waktu yang lama, meskipun harus diakui ini bisa menjadi sedikit lebih deskriptif.

Saya biasanya menemukan menggunakan JSON jauh lebih fleksibel sehingga saya jarang melakukan ini lagi. Lihat komentar saya di atas untuk metode mengambil JSON yang diposting di PHP.

Neraka.

Saya tidak ingin merusak fungsionalitas api standar untuk formulir, jadi harus menambahkan fallback .

if(empty($_POST['dep_date'])) {
    $body = file_get_contents('php://input');
    $json = json_decode($body, true);
    $_POST['dep_date'] = $json['dep_date'];
    .....

Untungnya saya memiliki akses ke sisi php, jika itu adalah api eksternal, saya akan menjadi . Seharusnya ada peringatan tentang ini ketika mendaftar semua klien ajax untuk vue :)

Ini bekerja dengan saya menggunakan "params", dan saya menggunakan PHP dengan ini.
Perhatikan bahwa ini adalah aksio di dalam nativescript-vue 2.0.0.

@HellsingMatt Terima kasih!

Saya membuat milik saya berfungsi dengan menginstal qs.

          import qs from "qs";


        const params = {
            name: "User",
            startTime: "2:00PM",
            endTime: "3:00PM",
            status: "pending",
            invitation: "test",
        };

        axios.post("DOMAIN/event/new", qs.stringify(params))
            .then((response) => {
                console.log(response);
            })
            .catch((error) => {
                console.log(error);
            });

P

Tolong bisakah Anda memposting kode backend php dengan semua tajuk kor dan tipe konten. Saya telah mencoba kedua aksio dan mengambil keduanya tidak berfungsi.

Sepertinya kesalahan dalam dokumentasi, tetapi harus menggunakan objek params, tidak ada data dan berfungsi. Saya telah menghabiskan 2 jam untuk memahaminya ((

 aksio({
 metode: 'posting',
 url: 'url',
 parameter: {
 kunci: nilai
 }
 })

Terima kasih banyak Danil. Saya menghargai bantuan Anda. Terima kasih telah memberi tahu saya
kesalahan.

Pada Sabtu, 10 November 2018 pukul 11:18 Daniil [email protected] menulis:

Sepertinya kesalahan dalam dokumentasi, tetapi harus menggunakan objek params, tidak
data dan itu berfungsi. Saya telah menghabiskan 2 jam untuk memahaminya ((

aksio({
metode: 'posting',
url: '/wp-admin/admin-ajax.php?action=data_fetch',
parameter: {
kunci: nilai
}
})


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/axios/axios/issues/1195#issuecomment-437612819 , atau bisukan
benang
https://github.com/notifications/unsubscribe-auth/ApIWeUP45k17b70vsaT80KR1g_cxXcMvks5utyZzgaJpZM4Ql8j5
.

Saya memperbaiki masalah saya seperti itu:

Depan

userSearchParams() tidak berfungsi di mana-mana ( https://caniuse.com/#search =URLSearchParams() )

        let params = new URLSearchParams();
        params.append('email', this.email );
        params.append('url', userInfo.url );
        this.$http.post(
          'http://localhost:9999/api/record.php', params
          )
        .then((response) => {
          if (response.data.message === "success" )  this.$router.push( 'thankyou' );
        })
        .catch( (error) =>   console.log(error) ) ;

Kembali

print_r( $_POST ); 

// $_POST['email'] = '[email protected]'
// $_POST['url'] = 'http://google.fr'

Ini sangat membantu, terima kasih!

axios({
  method: 'post',
  url: 'http://blahblahblah',
  params: {
    key1: value1,
    key2: value2
  }
})

bekerja dengan cara ini, gunakan _params_, bukan _data_

bekerja untuk saya juga terima kasih, pendekatan yang jauh lebih bersih.

Saya memiliki instance Axios yang sudah dibuat dengan url dasar.

Saya ingin membuat posting menggunakan instance itu. Apa pengaturan yang benar?

Ini bekerja:

    axios({
        method: "post",
        url: "https://slack.com/api/chat.postMessage",
        params: {
            token: this.token,
            channel: this.channel,
            text: "Testing API"
        },
        transformRequest: [
            (data, headers) => {
                console.log("data-in-transform", data);
                delete headers.post["Content-Type"];
                return data;
            }
        ]
    });

Ini tidak bekerja:

    ax = axios.create({
        baseURL: `https://slack.com/api/`,
        params: {
            token: this.token,
            channel: this.channel
        },
        withCredentials: false,
        transformRequest: [
            (data, headers) => {
                delete headers.post["Content-Type"];
                return data;
            }
        ]
    });
        this.ax.post("chat.postMessage", {
            withCredentials: false,
            params: {
                text: "Testing API"
            },
            transformRequest: [
                (data, headers) => {
                    console.log("data-in-transform", data);
                    delete headers.post["Content-Type"];
                    return data;
                }
            ]
        });

Saya menghabiskan 15 hari untuk menyelesaikan masalah ini :( Ini Kodenya

 Axios({

        method: apiMethod,
        url: root_url, // Api URL
        data: (apiMethod === 'POST')? Qs.stringify(apiParams) : undefined, // API post parameters,
        params:(apiMethod === 'get')? apiParams : undefined, //API get params
        headers:{
          'Accept': 'application/json',
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        },

    }).then(function (response) { // On Success
        console.log('Response', response.data );

        successCallback(response.status, response.data);
    })
    .catch(function (error) { // On Failure
        console.log('error', error);

        errorCallback(error.status, error.data);
    })
    .then(function () { // Always
        alwaysCallback(false);
    });

Itu sangat mengerikan. Diskusi yang begitu panjang untuk sekedar mengirimkan permintaan POST dan pada akhirnya kami belum memiliki solusi konkrit.

Saya menghadapi masalah yang sama dan sudah menghabiskan 3 hari. Mencoba semua kombinasi dan opsi yang mungkin dan masih menemukan diri saya pada situasi yang sama. Oleh karena itu backend saya juga ditulis dalam PHP, saya juga merasa bahwa axios memiliki masalah besar dengan kombinasi POST dan PHP, yang sama sekali tidak dapat diterima!!

jQuery menangani hal-hal ini dengan sangat baik dan saya akan beralih kembali ke sana. Saya tidak ingin menginstal dependensi tambahan hanya untuk mengirim permintaan POST!

Juga, utas ditutup tanpa solusi yang tepat!!

Itu ditutup oleh @awais-ilyas, dia idealnya membukanya kembali, jika memungkinkan.

Ya! Tapi utasnya tidak membawa saya ke mana pun. Mengirim permintaan POST ke PHP menggunakan objek JSON masih menyusahkan! @dlgoodchild apakah ada solusi karena saya terlambat datang ke utas ini?

ya @emfluenceindia ada banyak solusi yang disebutkan di utas ini yang tidak perlu menggunakan JSON.

Saya melihat mereka. Apakah ini berarti masih tidak mungkin untuk POST sebagai JSON?

Utas ini sebenarnya bukan tentang memposting JSON. Memposting JSON sebagai badan posting bukanlah masalah, utas ini tentang menggunakan atribut data:, seperti dengan jQuery dan entah bagaimana mengisi $_POST di PHP.

Saya baru-baru ini mulai beralih dari menggunakan jQuery untuk pekerjaan AJAX ke Axios, hanya karena tampaknya menjadi hal yang populer. Tetapi saya terkejut mengetahui bahwa saya tidak dapat melakukan POST sederhana.

Jadi, inilah yang pertama kali saya coba:

axios.post('/api/event/item', {
    event_id: eventId,
    item_id: itemId,
    description: description
  })
  .catch(function (error) {
    console.log(error);
  });

Di backend (menggunakan PHP) $_POST benar-benar kosong. Jadi saya melakukan beberapa googling, dan ini berhasil (dengan menggunakan polyfill, menghela nafas):

const params = new URLSearchParams();
params.append('event_id', eventId);
params.append('item_id', itemId);
params.append('description', description);
axios({
  method: 'post',
  url: '/api/event/item',
  data: params
});

Ini bekerja. Jadi saya perlu menggunakan URLSearchParams ? Nah ini membuat frustrasi karena dokumen menunjukkan bahwa metode pertama seharusnya berhasil.

Adakah orang lain yang mengalami masalah ini?

Saya menemui masalah ini hari ini dan saya telah menghabiskan hampir sepanjang hari untuk ini. itu s weird because the document of axios told me to use first method which didn tidak berfungsi. terima kasih, bro

apakah kalian menempatkan
app.use(express.json())
di app.js?

Ini harus cukup:

const formData = new FormData();
formData.append('action', 'some-action');
formData.append('page', 1);

axios
  .post('/async/index.php', formData, {
    retry: 3,
    retryDelay: 100,
  })
  .then(res => {
    console.log('get', res.data);
  })
  .catch(console.log);

PHP

print_r($_POST);

Jawabannya adalah dengan menambahkan yang berikut ini. Axios menggunakan url-form-encoded secara default.

headers: {
  "Content-Type": "text/plain"
}

Tak satu pun dari solusi ini bekerja untuk saya, dan saya pikir itu karena untuk pengguna node.js README menyesatkan karena Anda _harus memiliki objek data_ untuk permintaan posting karena objek konfigurasi adalah _argumen ke3_ yang diteruskan. .post fungsi memiliki antarmuka ini

post(url: string, data?: any, config?: AxiosRequestConfig): AxiosPromise;

jadi Anda harus memanggil fungsi .post seperti ini

await axios.post(
 `http://localhost:3000/your/path/here`,
 {},
 {
   params: {
     ID: 12345,
     name: 'testUser',
   },
 },
);

@NathanielRN solusi ini berfungsi tetapi tidak optimal. Itu menambahkan semua parameter ke url. Mirip dengan "mendapatkan".

@NathanielRN solusi ini berfungsi tetapi tidak optimal. Itu menambahkan semua parameter ke url. Mirip dengan "mendapatkan".

@nicolardi Maaf saya tidak terlalu akrab dengan kinerja permintaan url. Apakah menambahkan parameter ke url tidak optimal? Bahkan jika itu seperti "mendapatkan"?

Axios adalah klien paling terkenal di sekitar namun memiliki kekurangan seperti itu. Mengecewakan.

Pembukaan kembali untuk penyelidikan

Inilah masalahnya: masalahnya bukan pada Axios. Jika Anda menggunakan cURL atau Postman dengan parameter yang sama (metode: Posting, Body: {"something":"value"}, header disetel ke json) itu berfungsi. Namun, jika Anda melakukannya menggunakan Axios atau bahkan Fetch API di Vue, React, Angular (apa pun), Anda akan melihat Chrome atau (browser lain) "mengubah" Metode Permintaan (lihat tab Jaringan) menjadi OPSI dan BUKAN POSTING lagi. Alasan dibaliknya adalah... CORS (Cross-origin resource sharing). Saya mengetahuinya karena saya membuat API saya menggunakan NestJS dan saya lupa mengaktifkan CORS. Saat diaktifkan, Metode Permintaan disimpan sebagai POST (seperti yang kami inginkan) dan Axios akan dapat mengembalikan JSON Anda (atau format lainnya). Beberapa kerangka kerja mengatur CORS secara otomatis (misalnya Laravel) di mana yang lain Anda harus mengatur/mengaktifkannya secara manual.

Ini harus cukup:

const formData = new FormData();
formData.append('action', 'some-action');
formData.append('page', 1);

axios
  .post('/async/index.php', formData, {
    retry: 3,
    retryDelay: 100,
  })
  .then(res => {
    console.log('get', res.data);
  })
  .catch(console.log);

PHP

print_r($_POST);

solusi oleh @jonataswalker adalah pendekatan terbaik untuk menangani POST menggunakan Axios. Menggunakan FormData() bekerja untuk saya.

jadi saya memiliki jenis masalah yang sama. saya menggunakan Vue.js untuk bagian depan saya dan saya menemukan sejak saya melakukan pembaruan ke versi terakhir (axios, dan vue) saya tidak dapat mengirim data dengan cara apa pun. dalam proyek terakhir saya, saya dapat mengirim data dalam format apa pun.

Dalam versi yang lebih lama berfungsi dengan baik dan yang diperbarui tidak berfungsi sama sekali.

axios.post('/actions/posts/create_questionnaire' , { questionnaire : form })

saran saya jika posting tidak berhasil coba gunakan axios versi lama dan freamwork yang Anda gunakan.

Saya mengalami masalah ini dengan backend Django. Untungnya saya memiliki solusi menggunakan GET tetapi axios.post jelas tidak berfungsi seperti yang didokumentasikan.

Mungkin itu bukan masalah axios tapi cors.
Jika Anda memposting dari server simpul ke backend php maka skrip php Anda harus memiliki kors:

https://stackoverflow.com/a/55392661

dan juga tidak menggunakan $_POST tetapi $data = file_get_contents('php://input');

Ini tampaknya berfungsi untuk mengambil nilai $_POST di PHP:

    axios.post(url, {test: 'dafasfasfa'},{
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            "Access-Control-Allow-Origin": "*"
        }
    })

Saya akhirnya berhasil dengan backend Django (dengan cors diinstal dan dikonfigurasi) seperti ini, menggunakan kombinasi ide @alvarotrigo dan @latanoel :

const formData = new FormData();
formData.append('a1', this.form.a1);
formData.append('a2', this.form.a2);
formData.append('a3', this.form.a3);

axios
  .post(url, formData, {
    headers: {
      'Content-type': 'application/x-www-form-urlencoded',
    }
  })
etc

Saat Anda menyertakan POST args inline seperti yang disarankan oleh dokumen, POST kosong di backend. Juga, Anda tidak dapat mengatur Access-Control-Allow-Origin karena itu melanggar cors.

Juga, temukan metode ini juga
const paramsCompose = (formData) => { const str = []; for (let p in formData) { str.push(encodeURIComponent(p) + '=' + encodeURIComponent(formData[p])); } const body = str.join('&'); console.log('PARAMS ' + body); return body; };

Terus Anda ...
return axios.post(url, paramsCompose({ image_url: image_url, cover_name: cover_name })) .then(res => { const tx = res.data; console.log(tx); return res.data });

Setelah beberapa hari dan mencoba semua opsi sebelumnya... Saya masih belum berhasil memecahkan masalah.

Apa yang kita miliki, sebenarnya adalah:

  • Metode 'posting' Axios tidak berfungsi seperti yang didokumentasikan;
  • Jalankan panggilan 'posting' sederhana ke layanan REST menjadi neraka, menggunakan Axios;

Saya tidak percaya ini serius... maaf tapi saya akan kembali menggunakan API lain. Selamat tinggal Axios.

@fabriciobraga Saya mencoba mencari tahu mengapa ini terjadi di aplikasi saya juga. Saya menghabiskan sepanjang hari menjelajahi Internet untuk mencari solusinya. Namun, saya menemukan bahwa itu adalah masalah yang sangat sederhana. Pengguna saya membuat action tampak seperti ini pada awalnya:

createUser(context, user) {
    this.$axios.$post("/api/users/", user).then(response => {
      context.dispatch("fetchUsers");
    });
 }

Parameter user ada objek yang berisi email dan password dari pengguna baru. Saya mencoba console.log objek pengguna dan dilaporkan bahwa propertinya tidak ditentukan! 🤔.

Screen Shot 2020-01-27 at 10 00 04 PM

Jadi saya menyebarkan objek pengguna ketika meneruskannya ke metode $post dan sekarang berhasil!

 this.$axios.$post("/api/users/", {...user})

Dalam kasus saya, objek pengguna dikirim sebagai objek kosong dan API saya melaporkannya. Jika Anda menghadapi masalah yang sama mungkin Anda harus mencoba ini.

Satu skenario lain yang mungkin adalah bahwa data Anda dikirim dengan baik tetapi tidak dalam format yang diharapkan API Anda (misalnya format umum untuk skrip PHP adalah form-data sementara sebagian besar API Node.js mengharapkan JSON). Jadi, Anda perlu mencari tahu ini; lihat pembahasan di atas .

Memiliki masalah yang sama rupanya
axios.post("api", { API: 1, version: "0.1b"...})....
Hasil dengan API dan versi kosong saat mencapai server istirahat Java saya.
Saat mengirimnya sebagai parameter ke-3, yaitu
axios.post("api", null, { params: {API: 1, version: "0.1b"...}})....
Ini berfungsi seperti yang diharapkan

Ini adalah salah satu masalah yang paling banyak dikomentari dan dibuka. Percayalah bahwa saya telah membaca setiap komentar di utas ini. Banyak pengguna yang bingung bagaimana cara memposting data dengan axios. Seseorang memberikan hit atau kesimpulan mereka dan pengguna baru melewatkan arahan mereka lagi.

Ingat bahwa axios hanya klien permintaan. Jika Anda tidak melihat respons yang diharapkan, periksa apakah hal-hal yang dikirim axios cocok dengan apa yang diharapkan server. Berikut adalah langkah-langkah utama saya untuk menyelesaikan masalah posting atau bahkan semua axios. Dan saya juga berharap pengguna dapat membuka masalah dengan menjawab pertanyaan berikut. Mungkin perbarui template masalah nanti.

  1. Sisi mana Anda menjalankan kode Anda? Browser atau sisi server.
  2. Parameter apa yang ingin Anda kirim? Haruskah menggunakan config.params atau config.data ?
  3. Jika params , bagaimana cara menyandikannya? Apakah default config.paramsSerializer cukup atau harus menggunakan yang disesuaikan?
  4. Jika data , apakah Anda menyandikannya dengan header content-type yang benar? Sebagian besar masalah posting gagal di sini.

    1. Header application/json membutuhkan JSON.stringify dan header application/x-www-form-urlencoded membutuhkan qs.stringify .

    2. Default config.transformRequest akan menetapkan application/x-www-form-urlencoded untuk URLSearchParams, dan application/json untuk objek Javascript. Silakan periksa kode sumber di lib/defaults.js untuk mendapatkan pemahaman yang akurat.

  5. Apakah Anda menemui masalah lain, yaitu CORS/ATS/Promises, dan tahu cara mengatasinya?

Saya tahu mereka terlihat rumit dan saya berencana untuk menulis tutorial yang menjelaskan sedetail mungkin. Tapi saya bukan penutur asli dan sedikit khawatir tentang tingkat artikel saya. Maafkan saya menguncinya dan mohon tunggu saya atau seseorang dari komunitas untuk memberikan dokumen yang ditulis dengan baik. Ini adalah sumber terbuka. Kami membutuhkan kontribusi semua orang.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat