Hi Tweakers,
Zonder Ajax/jQuery wilde ik eens proberen een complex formulier in elkaar te zetten.
Nou ging alles redelijk voorspoedig totdat ik afbeeldingen moest verzenden / uploaden.
Hierbij wil ik gebruik maken van new FormData().
Dit is mijn JS code:
Zoals je heir kunt zien vul ik het FormData object met key / values. Als ik in PHP het $_POST object return is deze gevuld met alle gewenste data, behalve de afbeeldingen.
Ik probeer images los door te sturen door ze allemaal los te appenden met image-${f} of door het FileList object door te sturen met input.files.
In PHP worden de losse afbeeldingen niet getoond als ik het $_POST object return. Ook het $_FILES object is leeg. De doorgestuurde images is wél gevuld met `images : "[object File],[object File],[object File],[object File]"`, waar ik helaas niet overheen kan loopen oid met een foreach.
PHP code in het Ajax bestand:
Hieruit komen de resultaten:
- postObj: gevuld met de $_POST data behalve de losse afbeeldingen image-${f}
- files: leeg
- json: leeg
- post: leeg
Iemand een oplossing of suggestie voor het correct afhandelen van deze afbeeldingen?
Via PHP wil ik ze uiteindelijk op de server zetten via php move_uploaded_file oid.
Alvast heel erg bedankt !
Zonder Ajax/jQuery wilde ik eens proberen een complex formulier in elkaar te zetten.
Nou ging alles redelijk voorspoedig totdat ik afbeeldingen moest verzenden / uploaden.
Hierbij wil ik gebruik maken van new FormData().
Dit is mijn JS code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| formElem.addEventListener('submit', (event) => { event.preventDefault(); const formData = new FormData(); for(let i = 0; i < inputElems.length; i++) { const input = inputElems[i]; const id = input.getAttribute('id'); if(id === 'images') { for(let f = 0; f < input.files.length; f++) { formData.append(`image-${f}`, input.files[f]); } formData.append('images', input.files); } else if(id) { formData.append(`${id}`, input.value); } } for (var [key, value] of formData.entries()) { console.log('formData', key, value); } const request = new XMLHttpRequest(); request.open('POST', '/inc/ajax/PostRequest.php', true); request.send(formData); }); |
Zoals je heir kunt zien vul ik het FormData object met key / values. Als ik in PHP het $_POST object return is deze gevuld met alle gewenste data, behalve de afbeeldingen.
Ik probeer images los door te sturen door ze allemaal los te appenden met image-${f} of door het FileList object door te sturen met input.files.
In PHP worden de losse afbeeldingen niet getoond als ik het $_POST object return. Ook het $_FILES object is leeg. De doorgestuurde images is wél gevuld met `images : "[object File],[object File],[object File],[object File]"`, waar ik helaas niet overheen kan loopen oid met een foreach.
PHP code in het Ajax bestand:
PHP:
1
2
3
4
5
6
7
8
9
| $json = file_get_contents('php://input'); $post = json_decode($json); $return['postObj'] = $_POST; $return['files'] = $_FILES['images']; $return['json'] = $json; $return['post'] = $post; echo json_encode($return); |
Hieruit komen de resultaten:
- postObj: gevuld met de $_POST data behalve de losse afbeeldingen image-${f}
- files: leeg
- json: leeg
- post: leeg
Iemand een oplossing of suggestie voor het correct afhandelen van deze afbeeldingen?
Via PHP wil ik ze uiteindelijk op de server zetten via php move_uploaded_file oid.
Alvast heel erg bedankt !