2013-05-26 15 views
6

La riga data:.. è corretta? Voglio inviare i dati del modulo AND token csrf a una funzione di visualizzazione Django.JQuery: post FormData AND token csrf insieme

$('#file-upload').on('change', function() { 
    var currentpath = window.location.pathname; 
    var formData = new FormData($('form')[0]); 
    $.ajax({ 
      url: currentpath, //server script to process data 
      type: 'POST', 
      data: {formData, 'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
      cache: false, 
      contentType: false, 
      processData: false 
     }); 
}); 
+1

Vorrei sottolineare che '{{csrf_token}}' funzionerà solo se questo codice appare sul corpo del modello. Se si trova all'interno di un file JS importato. Non funzionerà. –

+0

Esiste anche una soluzione alternativa. Definisci un '

{{ csrf_token }}
' nel tuo file di modello. Nel tuo file JS importato puoi aggiungere il token all'oggetto FormData come 'formData.append ('csrfmiddlewaretoken', '{{csrf_token}}');' – shaktimaan

risposta

9

bisogna aggiungere i parametri all'oggetto formdata (utilizzando append) e come sempre passare l'oggetto formdata da solo come la proprietà dei dati.

$('#id_image').on('change', function() { 
    var currentpath = window.location.pathname; 
    var formData = new FormData($('form')[0]); 
    formData.append('csrfmiddlewaretoken', '{{ csrf_token }}'); 
    $.ajax({ 
      url: currentpath, //server script to process data 
      type: 'POST', 
      data: formData, 
      cache: false, 
      contentType: false, 
      processData: false 
     }); 
}); 
+0

@ Philip007 mio male ho usato un ':' invece di un ', 'per separare i parametri in append (troppo rpg). Vedi l'aggiornamento. – Musa

+0

Grazie, hai salvato la mia giornata – medoingthings

+0

Non funziona per me. Ricevo ancora il 403 a causa del token mancante. Se commento "processData: false", ricevo 'TypeError: 'append' chiamato su un oggetto che non implementa l'interfaccia FormData. – M46