2013-05-26 34 views
6

Dòng data:.. có chính xác không? Tôi muốn đăng dữ liệu biểu mẫu VÀ mã thông báo csrf vào chức năng xem Django.JQuery: đăng Mã thông báo FormData và csrf cùng nhau

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

Tôi nên chỉ ra rằng '{{csrf_token}}' sẽ chỉ hoạt động nếu mã này xuất hiện trên phần thân của mẫu. Nếu nó nằm trong tệp JS được nhập. Nó sẽ không hoạt động. –

+0

Có một giải pháp cho điều đó. Xác định một '

{{ csrf_token }}
' trong tệp mẫu của bạn. Trong tệp JS đã nhập của bạn, bạn có thể thêm mã thông báo cho đối tượng FormData dưới dạng 'formData.append ('csrfmiddlewaretoken', '{{csrf_token}}'); ' – shaktimaan

Trả lời

9

Bạn cần phải thêm các thông số của bạn đến đối tượng FormData (sử dụng append) và như mọi khi vượt qua các đối tượng formdata một mình như tài sản dữ liệu.

$('#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, tôi đã sử dụng': 'thay vì', 'để tách các tham số trong chắp thêm (quá nhiều rpg). Xem cập nhật. – Musa

+0

Cảm ơn, bạn đã lưu ngày – medoingthings

+0

Không hoạt động cho tôi. Tôi vẫn nhận được 403 vì thiếu mã thông báo. Nếu tôi nhận xét "processData: false" thì tôi nhận được 'TypeError: 'append' được gọi trên một đối tượng không thực hiện giao diện FormData.' – M46

Các vấn đề liên quan