2017-05-04 2 views
1

Je passe un paramètre global dans toutes les requêtes ajax jquery en utilisant la fonction ajaxSetup comme ci-dessousJQuery ajaxSetup - annexant données globales à FormData

$.ajaxSetup({ 
    data: { 
     csrf: csrfValue 
    } 
}); 

Cela fonctionne bien pour toutes les demandes, sauf quand je fais un fichier ajax télécharger

var formData = new FormData(); 
formData.append('attachedFile', file); 
$.ajax({ 
     url: '/fileUpload', 
     data: formData, 
     success: function() { 
      .... 
     } 
}); 

Depuis que je me sers d'un FormData, le csrf pARAM est pas se joint en annexe. Existe-t-il un moyen approprié d'ajouter des données communes à tous les types de requêtes ajax?

+0

Essayez avec append 'CSRF: csrfValue' avec des données. Comme ceci, 'data: formData + csrf +" = "+ csrfValue'. –

+0

Pouvez-vous montrer un autre extrait de requête où ajaxsetup fonctionne correctement? – Manwal

+0

@Manwal cela fonctionne pour toutes les demandes où les données sont juste un objet json. – Krishnaraj

Répondre

0

Vous pouvez résoudre ce problème en utilisant $.extend et $.ajaxPrefilter pour fusionner les données par défaut avec les données que vous avez fourni: UPDATED:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
    if (originalOptions.data instanceof FormData) { 
     originalOptions.data.append(csrfParamName, csrfParamValue); 
    } 
}); 
+0

Malheureusement, cela ne fonctionne pas. Les paramètres supplémentaires à formData ne fonctionnent que lorsque vous utilisez sa méthode append :(. – Krishnaraj

+0

Ne pensez pas que $ ext. Fonctionnera jamais 'FormData' mais utiliser ajaxPrefilter semble être une bonne option. . 'si (originalOptions.data instanceof FormData) { de originalOptions.data.append (csrfParamName, csrfParamValue); }' – Krishnaraj

+0

@Krishnaraj .extend $ se comporte comme votre append Il fusionne les deux objets https: // api.. jquery.com/jquery.extend/ –

0

Oui, il ne fonctionne pas parce que vous utilisez FormData. Ajouter le csrfValue à vos données ajax ou ajouter un champ caché dans votre formulaire

<input type="hidden" value="{{ csrfValue }}"?>