web-dev-qa-db-fra.com

Envoyer un objet FormData ET un paramètre supplémentaire via ajax

J'ai réussi à envoyer un objet FormData comme ceci:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: formData,
   cache: false,
   contentType: false,
   processData: false
}, 'json');

Maintenant, ce que je veux faire, c'est ajouter un CustomerId supplémentaire à envoyer au serveur. Les éléments suivants ne fonctionneront pas:

var formData = new FormData();
formData.append('file', this.files[0]);
$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: { "file": formData, "CustomerId": 2 },
   cache: false,
   contentType: false,
   processData: false
}, 'json');

Et j'ai également essayé les variantes suivantes:

data: { "file": formData, "CustomerId": 2 }, processData: true

data: JSON.stringify({ "file": formData, "CustomerId": 2 })

data: { "file": JSON.stringify(formData), "CustomerId": 2 }

data: { file: formData, CustomerId: 2 }

Toute aide appréciée.

17
iuliu.net

Essayer:

var formData = new FormData();
formData.append('file', this.files[0]);
formData.append('CustomerId', 2);

/*
 note:: appending in form Data will give "csrf token mismatch error". 
 so better you make a input feild of type hidden with name = CustomerId 
 and value =  2 
*/ 

$.ajax({
   url: urlUploadProductsFile,
   type: 'POST',
   data: formData,
   cache: false,
   contentType: false,
   processData: false
}, 'json');
26
Borik Bobrujskov

Vous devez soit l'ajouter directement à formData (comme vous l'avez fait avec 'file'), ou utilisez les paramètres de requête (GET).

2
Jiri Tousek