Saya menggunakan ajax untuk mengirimkan formulir multi bagian dengan larik, bidang teks, dan file.
Saya menambahkan setiap VAR ke data utama seperti itu
var attachments = document.getElementById('files');
var data= new FormData();
for (i=0; i< attachments.files.length; i++){
data.append('file', attachments.files[i]);
console.log(attachments.files[i]);
data.append ('headline', headline);
data.append ('article', article);
data.append ('arr', arr);
data.append ('tag', tag);
kemudian saya menggunakan fungsi ajax untuk mengirimkannya ke file PHP untuk disimpan di dalam sql DB.
$.ajax({
type: "post",
url: 'php/submittionform.php',
cache: false,
processData: false,
contentType: false,
data: data,
success: function(request) {$('#box').html(request); }
})
Namun di sisi PHP, arr
variabel berupa array muncul sebagai string.
Ketika saya tidak mengirimnya dengan ajax sebagai data Formulir tetapi menggunakan $.POST
opsi sederhana, saya mendapatkannya sebagai array di sisi PHP, tetapi kemudian saya tidak dapat mengirim file juga.
ada solusi?
javascript
ajax
arrays
form-data
shultz
sumber
sumber
Anda juga dapat mengirim array melalui
FormData
cara ini:Jadi Anda bisa menulis
arr[]
dengan cara yang sama seperti Anda melakukannya dengan formulir HTML sederhana. Dalam kasus PHP itu harus berfungsi.Anda mungkin menemukan artikel ini berguna: Bagaimana cara melewatkan array dalam string kueri?
sumber
arr[]
diformData.append('arr[]', arr[i]);
? kenapa tidakarr
benar? Saya mencoba keduanya tetapi hanyaarr[]
berhasil.arr
Anda baru saja mendefinisikan ulang nilai ini pada setiap iterasi loop, dan pada akhirnya, nilai akhir akan sama dengan elemen array terakhir, tetapi tidak keseluruhan arrayarr[]
, mengapa tidakarr[]
didefinisikan ulang?arr[]
juga sebuah string. Dan sementara pengujian baik tidakarr
jugaarr[]
didefinisikan kembali dalam kasus saya. Saya mendapat beberapa array di FormData dengan kunci yang sama tetapi nilai berbeda. Jadi saya mendapatarr
nilai1
dan satu lagiarr
dengan nilai2
.arr
juga bekerja untuk array. Dalam topik ini ada jawaban yang lebih detail untuk pertanyaan inifor (var i = 0; i < myArr; i++) { var myItemInArr = myArr[i]; for (var prop in myItemInArr) { fileData.append(`myArr[${i}][${prop}]`, myItemInArr[prop]); } }
Ini adalah pertanyaan lama tetapi saya mengalami masalah ini dengan memposting objek bersama dengan file baru-baru ini. Saya harus bisa memposting sebuah objek, dengan properti anak yang merupakan objek dan array juga.
Fungsi di bawah ini akan berjalan melalui sebuah objek dan membuat objek formData yang benar.
Ini akan mengubah json berikut -
ke dalam FormData berikut
sumber
(value !== null) && formData.append(key, value)
bukan hanyaformData.append(key, value)
sebaliknya itu gagal pada nilai nolVersi naskah ketikan:
Menggunakan:
sumber
tambahkan semua jenis input ke FormData
sumber
Jika Anda memiliki objek dan larik bersarang, cara terbaik untuk mengisi objek FormData adalah menggunakan rekursi.
sumber
Versi berikutnya valid untuk model yang berisi larik nilai sederhana:
sumber
Berdasarkan jawaban @YackY versi rekursi yang lebih pendek:
Contoh penggunaan:
Data terkirim:
sumber