permet de sauter directement dans le code:
var formData = new FormData();
formData.append('name', dogName);
formData.append('weight', dogWeight);
formData.append('activity', dogActivity);
formData.append('age', dogAge);
formData.append('file', document.getElementById("dogImg").files[0]);
console.log(formData);
Ici, j'ajoute des chaînes et un objet fichier à l'objet formData afin d'envoyer toutes les informations de manière asynchrone au serveur.
Juste après, j’ai cette requête jquery ajax:
$.ajax({
type: "POST",
url: "/foodoo/index.php?method=insertNewDog",
data: formData,
processData: false,
contentType: false,
success: function(response){
console.log(response);
},
error: function(){
}
});
Donc ici je suis en train d'essayer de POST les informations au serveur, sur le fichier php du serveur, j'ai un simple print_r du POST afin de voir ce qui passe et ce qui ne passe pas.
Malheureusement, ma réponse dans le fichier console.log (données) est vide.
De même, si vous cochez la case HEADER dans l'onglet Network, vous obtenez le résultat vide suivant:
La fonction de succès est appelée (juste pour clarification)
Lorsque vous envoyez une demande ajax via jQuery et que vous souhaitez envoyer FormData, vous n'avez pas besoin d'utiliser JSON.stringify
sur cette FormData. De plus, lorsque vous envoyez un fichier, le type de contenu doit être multipart/form-data
, y compris boundry
- quelque chose comme ceci multipart/form-data; boundary=----WebKitFormBoundary0BPm0koKA
Donc, pour envoyer FormData avec un fichier via jQuery ajax, vous devez:
data
sur le FormData sans aucune modification.processData
sur false
(vous empêche d'empêcher jQuery de transformer automatiquement les données en chaîne de requête).contentType
sur false
(nécessaire, sinon jQuery ne le définira pas correctement).Votre demande devrait ressembler à ceci:
var formData = new FormData();
formData.append('name', dogName);
// ...
formData.append('file', document.getElementById("dogImg").files[0]);
$.ajax({
type: "POST",
url: "/foodoo/index.php?method=insertNewDog",
data: formData,
processData: false,
contentType: false,
success: function(response) {
console.log(response);
},
error: function(errResponse) {
console.log(errResponse);
}
});
//For those who use plain javascript
var form = document.getElementById('registration-form'); //id of form
var formdata = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.open('POST','form.php',true);
// xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//if you have included the setRequestHeader remove that line as you need the
// multipart/form-data as content type.
xhr.onload = function(){
console.log(xhr.responseText);
}
xhr.send(formdata);