2013-05-26 10 views
6

Подходит ли строка data:.. ниже? Я хочу опубликовать данные формы и токен csrf для функции просмотра Django.JQuery: post 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

Вы должны добавить ваши параметры объекта FormData (с использованием append) и как всегда проходит 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 my bad Я использовал ':' вместо ', 'для разделения параметров в append (слишком много rpg). См. Обновление. – Musa

+0

Спасибо, ты спас мой день – medoingthings

+0

Не работает для меня. Я все еще получаю 403 из-за недостающего токена. Если я прокомментирую «processData: false», тогда я получаю 'TypeError: 'append', вызываемый на объект, который не реализует интерфейс FormData.' – M46

Смежные вопросы