Saya sudah mencoba console.log
dan mengulanginya for in
.
Ini dia Referensi MDN pada FormData.
Kedua upaya ada di biola ini .
var fd = new FormData(),
key;
// poulate with dummy data
fd.append("key1", "alskdjflasj");
fd.append("key2", "alskdjflasj");
// does not do anything useful
console.log(fd);
// does not do anything useful
for(key in fd) {
console.log(key);
}
Bagaimana saya bisa memeriksa data formulir untuk melihat kunci apa yang telah ditetapkan.
javascript
form-data
Penny Liu
sumber
sumber
key of fd
alih - alihkey in fd
. Saya tidak tahu mengapa ini secara teknis, tetapi berhasil. Dokumentasi di sini .Jawaban:
Metode yang Diperbarui:
Pada Maret 2016, versi terbaru dari Chrome dan Firefox sekarang mendukung penggunaan
FormData.entries()
untuk memeriksa FormData. Sumber .Terima kasih kepada Ghost Echo dan bajingan karena menunjukkan ini!
Jawaban lama:
Setelah melihat artikel Mozilla ini , sepertinya tidak ada cara untuk mendapatkan data dari objek FormData. Anda hanya dapat menggunakannya untuk membangun FormData untuk dikirim melalui permintaan AJAX.
Saya juga baru saja menemukan pertanyaan ini yang menyatakan hal yang sama: FormData.append ("key", "value") tidak berfungsi .
Salah satu caranya adalah dengan membangun kamus reguler dan kemudian mengonversinya ke FormData:
Jika Anda ingin men-debug objek FormData biasa, Anda juga bisa mengirimnya untuk memeriksanya di konsol permintaan jaringan:
sumber
myFormData.entries()
var formData = new FormData(formElement)
. Jika Anda menggunakan JQuery, karena itu Anda dapat melakukan ini:var formData = new FormData($('#formElementID')[0])
. Kemudian tambahkan data sesuai kebutuhan.FormData
di IE / Edge: stackoverflow.com/questions/37938955/…Jawaban singkat
Jawaban yang lebih panjang
Jika Anda ingin memeriksa seperti apa bahan bakunya maka Anda dapat menggunakan konstruktor Respons (bagian dari mengambil API)
Beberapa keinginan menyarankan penebangan setiap entri entri, tetapi
console.log
juga dapat mengambil beberapa argumenconsole.log(foo, bar)
Untuk mengambil sejumlah argumen Anda bisa menggunakan
apply
metode dan menyebutnya seperti:console.log.apply(console, array)
.Tetapi ada cara ES6 baru untuk menerapkan argumen dengan operator penyebaran dan iterator
console.log(...array)
.Mengetahui hal ini, dan fakta bahwa FormData dan kedua array memiliki
Symbol.iterator
metode dalam prototipe Anda hanya bisa melakukan ini tanpa harus mengulanginya, atau menelepon.entries()
untuk mendapatkan pegangan iteratorsumber
[...fd]
...
dari formdata untuk membuat array baru dengan semua item, maka konsol hanya membuang hasil dari baris terakhir yang Anda tulisSaya menggunakan
formData.entries()
metode ini. Saya tidak yakin tentang semua dukungan browser, tetapi berfungsi baik di Firefox.Diambil dari https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries
Ada juga
formData.get()
danformData.getAll()
dengan dukungan browser yang lebih luas, tetapi mereka hanya memunculkan Nilai dan bukan Kunci. Lihat tautan untuk info lebih lanjut.sumber
for (const pair of formData.entries()) { console.log(pair[0], pair[1]); }
ES6
fitur adalah dan hanya akan berfungsi di browser tertentu. Tidak termasuk versi IE apa pun menurut MDNDalam kasus tertentu, penggunaan:
tidak mungkin.
Saya telah menggunakan kode ini sebagai pengganti:
Ini bukan kode yang sangat pintar, tetapi berfungsi ...
Semoga ini bisa membantu.
sumber
done
terlebih dahulu.done
adalah bendera otoritatif; jikadone
salah atau tidak ditentukan, makavalue
item yang valid (bahkan jika itu memegang nilaiundefined
). Kapandone
hadir dantrue
, akhir dari urutan telah tercapai, danvalue
bahkan tidak harus didefinisikan. Jikavalue
didefinisikan saatdone
initrue
, makavalue
ditafsirkan sebagai nilai kembali dari iterator. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Ketika saya mengerjakan Angular 5+ (dengan TypeScript 2.4.2), saya mencoba sebagai berikut dan berfungsi kecuali kesalahan pengecekan statis tetapi juga
for(var pair of formData.entries())
tidak berfungsi.Tampilkan cuplikan kode
Periksa di Stackblitz
sumber
(value, key) => {..
. Sakit kepala !Metode yang mudah
Saya menggunakan kode ini dalam 8 sudut
sumber
Solusi ES6 +:
Untuk melihat struktur data formulir:
Untuk melihat setiap pasangan nilai kunci:
sumber
Berikut adalah fungsi untuk mencatat entri objek FormData ke konsol sebagai objek.
Dokumentasi MDN aktif
.entries()
Dokumentasi MDN
.next()
dan.done
sumber
sumber
for...of..
. Sakit kepala !Anda harus memahami bahwa
FormData::entries()
mengembalikan instance dariIterator
.Ambil contoh formulir ini:
dan loop-JS ini:
sumber
Di sudut 7 saya mendapat entri di konsol menggunakan di bawah baris kode.
sumber
Sudah dijawab tetapi jika Anda ingin mengambil nilai dengan cara yang mudah dari formulir yang dikirimkan, Anda dapat menggunakan operator spread dikombinasikan dengan membuat Peta baru yang dapat diubah untuk mendapatkan struktur yang bagus.
new Map([...new FormData(form)])
sumber
di
typeScript
dariangular 6
, kode ini bekerja untuk saya.atau untuk semua nilai:
sumber
Coba fungsi ini:
sumber
The MDN menunjukkan bentuk berikut:
kalau tidak
Pertimbangkan untuk menambahkan ES + Polyfill , jika browser atau lingkungan tidak mendukung JavaScript dan API FormData terbaru.
Saya harap ini membantu.
sumber
formData()
harus dikapitalisasi, pertama. Juga,for ... of loop
saluran 3 Anda secara implisit memanggil FormData.entries, Anda dapat melihatnya dengan menjalankannyanew FormData()[Symbol.iterator]
di konsol. Akhirnya, jika Anda menjalankan ini di browser seperti Edge, yang tidak mendukung FormData.entries, Anda mendapatkan hasil yang tidak terduga, seperti mencetak nama metode yang tersedia di objek FormData:>>> var data = new FormData(); data.append("Foo", "Bar"); for(let x in data){console.log(x)};
<<< 'append'