2013-05-26 19 views
6

data:..線是否正確?我想將表單數據AND csrf標記發佈到Django視圖函數。JQuery:將FormData和csrf令牌一起發佈

$('#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

我應該指出'{{csrf_token}}'只有在代碼出現在模板的主體上時纔會起作用。如果它在導入的JS文件中。它不會工作。 –

+0

還有一個解決方法。在模板文件中定義一個'

{{ csrf_token }}
'。在您導入的JS文件中,您可以將該令牌添加到FormData對象,如formData.append('csrfmiddlewaretoken','{{csrf_token}}');' – shaktimaan

回答

9

你有你的參數添加到(使用append)的FORMDATA對象,因此總是獨自傳遞FORMDATA對象的數據屬性。

$('#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我不好使用':'而不是' '將追加的參數分開(太多的RPG)。查看更新。 – Musa

+0

謝謝,你救了我的一天 – medoingthings

+0

不適合我。由於缺少令牌,我仍然得到403。如果我註釋掉「processData:false」,那麼我會在未實現接口FormData的對象上調用TypeError:'append'。 – M46