Axios: Terkadang response.data adalah string, bukan objek

Dibuat pada 13 Agu 2018  ·  43Komentar  ·  Sumber: axios/axios

Saya tidak tahu mengapa tetapi dengan api yang sama, terkadang response.data axios adalah string, bukan objek. Lihat gambar di bawah ini.

image

Konteks

  • versi aksio: 0.18.0
  • Lingkungan: Bereaksi Expo SDK asli 29, jendela 10

Komentar yang paling membantu

Saya menemukan bahwa ini terjadi ketika respons json dari server tidak valid, gunakan validator json seperti https://jsonlint.com/ untuk memastikan json Anda diformat dengan benar

Semua 43 komentar

@huy-lv,

Apakah content-type sama untuk kedua tanggapan?

@robmcguinness Ya, ini aplikasi/json

Saya melihat perilaku yang sama. Saya menemukan bahwa dalam kasus saya, respons API terkadang berisi data JSON yang tidak valid, yaitu JSON.parse akan dibuang. Untuk beberapa alasan Axios tampaknya menelan kesalahan ini, dan akhirnya menyetel string JSON yang tidak valid pada properti data .

Saya juga punya masalah ini. Ketika saya memeriksa response.data dari kasus masalah, beberapa String JSON yang tidak valid seperti data " ditambahkan ke respons, yang membuat JSON.parse mendapatkan kesalahan dan mengembalikan string.

Saya telah memeriksa dengan Axios, XMLHttpRequest, fetch
1./ Axios dan XMLHttpRequest mendapat masalah yang sama
2./ ambil bekerja dengan sempurna

Saya tahu ada beberapa karakter yang dapat menyebabkan masalah itu, hanya perlu memastikan.
Bisakah Anda menangkap respons dan melampirkannya sebagai file?

@OpenGG maaf atas keterlambatan respon, apa yang Anda butuhkan di sini :D
https://1drv.ms/t/s!AnakDtCf8CG5hIgn2Hemy6zanFi50Q

@huy-lv Bukan yang saya harapkan. Harap simpan respons dengan curl, lalu lampirkan file yang disimpan dengan meletakkannya di area balasan masalah ini.

@huy-lv

Tidak apa-apa, menemukannya.
Saya menempelkannya di Gist dan mencoba memuat dengan aksioma, tidak dapat melihat kesalahan apa pun.

file: https://Gist.github.com/OpenGG/ac72e79f9ef088e993213473116c0cd0
demo: https://codepen.io/OpenGG/pen/bxEqKL

saya tahu, masalah ini tidak terjadi setiap saat, sekitar 1-2 kali setiap 10 permintaan (API yang sama, respons yang sama)

@OpenGG itu terjadi di React-Native. Aplikasi Web bekerja dengan sempurna.

@nighttiger1990

Bisakah Anda membuat demo online di expo, dan membagikannya? Demo ini harus membuat permintaan yang sama dengan Axios dan XMLHttpRequest, untuk menentukan apakah Axios atau RN menyebabkan masalah ini.

@OpenGG bisakah Anda memberi saya email Anda, saya akan mengirimi Anda api, saya tidak bisa mempublikasikannya
https://github.com/nighttiger1990/axiosBug.git

Adakah keberuntungan dengan masalah ini? Aku juga menghadapinya

@Druthi sekarang saya menggunakan 'ambil' bukan 'aksios'

perubahan apapun?

Ini mungkin bukan kasus Anda tetapi dalam kasus saya:
String respons API saya bukan JSON yang valid, jadi aksio tidak dapat menguraikan ke JSON, lalu mengembalikan string mentah sebagai gantinya.

Saya telah memigrasikan aplikasi saya (redux-saga,axios) ke webpack4 dan sekarang response.data adalah string, bukan objek. Perubahan migrasi yang saya buat minimal untuk dikompilasi dengan sukses
package.json
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-middleware": "^3.6.1",
"webpack-dev-server": "^3.2.1"
"file-loader": "^3.0.1",

webpack-config.js
mode tambahan: 'pengembangan', ke module.exports
mengomentari warna: benar, di devServer
mengomentari json-loader

Saya menjalankan JSON.parse(response.data) dan JSON rusak. (Token tak terduga: di JSON pada posisi 8181)

            "municipality": "ddrNote": ""      should be

            "municipality": "",
            "addrNote": ""

Saya membandingkan dengan kode webpack3 pra migrasi saya di mana JSON di response.data OK (objek). Jadi kode yang dimigrasikan berhasil merusak JSON di response.data dan itulah sebabnya kode itu muncul sebagai string. Jadi sekarang pertanyaannya adalah mengapa JSON rusak

Saya memecahkan masalah dengan menurunkan versi ke "webpack-dev-server": "3.1.10"

Saya memiliki proxy devServer yang saya kira merupakan penyebab kerusakan respons untuk versi yang lebih besar dari 3.1.10

@petercutting juga merupakan masalah di lingkungan produksi,

@nyilmaz masalah saya ternyata disebabkan oleh webpack-dev-server. webpack-dev-server tidak akan digunakan di lingkungan produksi

@petercutting apakah Anda membuka masalah terhadap webpack-dev-server? Saya tidak dapat menemukan di.

@goodmorninggoaway Saya tidak ingat. mungkin tidak

Terlepas dari masalah webpack-dev-server, Axios seharusnya tidak menelan pengecualian JSON.parse diam-diam, bukan?

Saya baru saja menguji ketahanan aplikasi dengan mengirimkan JSON yang salah format dari backend. Permintaan Axios secara diam-diam gagal memecahkan kode JSON. Header content-type masih mengatakan "application/json" , tetapi response.data adalah string mentah yang belum diuraikan, dan aplikasi saya mogok secara tidak terduga sebagai tindak lanjut.

Cukup gila bahwa perpustakaan dengan bintang 60k memiliki bug dasar selama setengah tahun :confused:

Terlepas dari masalah webpack-dev-server, Axios seharusnya tidak menelan pengecualian JSON.parse secara diam-diam, bukan?

Benar-benar valid

Adakah pembaruan pada bug ini untuk reaksi asli!?

Saya menemukan bahwa ini terjadi ketika respons json dari server tidak valid, gunakan validator json seperti https://jsonlint.com/ untuk memastikan json Anda diformat dengan benar

Masalah kesalahan menelan sedang dilacak, saya akan menutup masalah ini karena pada dasarnya adalah duplikatnya.

Silakan hubungi jika Anda memiliki pertanyaan.

@ fed135 tolong tautkan masalah yang relevan jika ada, terima kasih.

Adakah yang menyelesaikan ini?, Saya menggunakan laravel sebagai API saya, jadi saya mencatat respons saya sebelum mengirimnya ke aplikasi saya. Respons yang dicatat adalah JSON yang valid tetapi respons yang diterima memiliki kurung "}" terakhir yang hilang di bagian akhir, menjadikannya respons yang tidak valid. Saya tidak tahu mengapa ini berperilaku seperti ini di aplikasi seluler saya, karena untuk aplikasi frontend yang menggunakan axios juga berfungsi dengan baik, dicoba pada tukang pos juga, berfungsi dengan baik. ada ide atau solusi pls??

Itu terjadi ketika data menjadi terlalu besar :( Saya tidak punya masalah karena array datanya kecil!

@matinzd saya membuat paginasi data saya, dan hanya mengembalikan 20

@matinzd dan juga, aplikasi fronend saya menggunakan titik akhir yang sama, dan tidak mengalami itu, hanya aplikasi seluler dengan reaksi asli kadang-kadang melakukannya

@ fed135 Apakah ini masalah yang tepat untuk dilacak sebagai tindak lanjut? #61

tolong api laravel saya keluar sebagai string bersama

Saya akhirnya menemukan solusi untuk saya.
Data yang saya dapatkan adalah ===

saya mempunyai kesalahan yang sama
:(

Mendapat masalah yang sama, setelah check in jsonlint.com saya memiliki data dengan NaN yang json tidak dapat menguraikannya seperti di bawah ini. Jadi kita perlu memastikan backend kita mengirim data JSON yang valid.

Error: Parse error on line 186:
...,    "position_name": NaN,   "group_name": 
----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'

Kesalahan yang sama, siapa yang bisa memperbaikinya :|

️ Saya membuat PR cepat untuk mengatasi masalah ini. Semoga membantu

Mendapatkan masalah ini dalam reaksi asli dengan aksioma 0.19.2
Setiap pembaruan tentang masalah ini?

Saya mendapatkan masalah yang sama, saya memecahkan masalah ini, buat perubahan dalam metode aksioma, jika Anda memiliki metode 'GET', Anda tidak dapat mengirim badan karena Anda bisa mendapatkan masalah ini, untuk menyelesaikan ini, Anda perlu mengubah ke 'POST' dan itu akan bekerja

Apakah halaman ini membantu?
0 / 5 - 0 peringkat