Używam AJAX do przesłania formularza wieloczęściowego z tablicą, polami tekstowymi i plikami.
W ten sposób dołączam każdą VAR do głównych danych
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);
następnie używam funkcji ajax, aby wysłać ją do pliku PHP do przechowywania w sql DB.
$.ajax({
type: "post",
url: 'php/submittionform.php',
cache: false,
processData: false,
contentType: false,
data: data,
success: function(request) {$('#box').html(request); }
})
Ale po stronie PHP arr
zmienna, która jest tablicą, pojawia się jako ciąg.
Kiedy nie wysyłam go z AJAX jako danymi formularza, ale używam prostej $.POST
opcji, otrzymuję go jako tablicę po stronie PHP, ale nie mogę również wysłać plików.
jakieś rozwiązania?
javascript
ajax
arrays
form-data
shultz
źródło
źródło
Możesz również wysłać tablicę w
FormData
ten sposób:Możesz więc pisać
arr[]
tak samo, jak robisz to za pomocą prostego formularza HTML. W przypadku PHP powinno działać.Ten artykuł może okazać się przydatny: Jak przekazać tablicę w ciągu zapytania?
źródło
arr[]
wformData.append('arr[]', arr[i]);
? dlaczego nie jestarr
poprawne? Próbowałem obu, ale tylkoarr[]
działało.arr
prostu przedefiniuj tę wartość w każdej iteracji pętli, a na końcu końcowa wartość będzie równa ostatniemu elementowi tablicy, ale nie całej tablicyarr[]
, dlaczego nie jestarr[]
przedefiniowane?arr[]
jest również ciągiem. A podczas testowania ani,arr
ani niearr[]
zostało w moim przypadku przedefiniowane. Otrzymałem wiele tablic w FormData z tym samym kluczem, ale inną wartością. Więc mamarr
wartość,1
a drugąarr
wartość2
.arr
działało również dla tablic. W tym temacie jest bardziej szczegółowa odpowiedź na to pytaniefor (var i = 0; i < myArr; i++) { var myItemInArr = myArr[i]; for (var prop in myItemInArr) { fileData.append(`myArr[${i}][${prop}]`, myItemInArr[prop]); } }
To jest stare pytanie, ale ostatnio napotkałem ten problem z publikowaniem obiektów wraz z plikami. Musiałem mieć możliwość opublikowania obiektu z właściwościami potomnymi, które były również obiektami i tablicami.
Poniższa funkcja przejdzie przez obiekt i utworzy prawidłowy obiekt formData.
Spowoduje to konwersję następującego pliku json -
do następującego FormData
źródło
(value !== null) && formData.append(key, value)
zamiast po prostu wformData.append(key, value)
przeciwnym razie nie działa przy wartościach zerowychWersja maszynopisu:
Za pomocą:
źródło
dodaj wszystkie typy danych wejściowych do FormData
źródło
Jeśli masz zagnieżdżone obiekty i tablice, najlepszym sposobem na wypełnienie obiektu FormData jest użycie rekursji.
źródło
Następna wersja obowiązuje dla modelu zawierającego tablice prostych wartości:
źródło
W oparciu o krótszą wersję rekurencyjną @YackY answer:
Przykład użycia:
Wysłane dane:
źródło