【问题标题】:JQuery: post FormData AND csrf token togetherJQuery:一起发布 FormData 和 csrf 令牌
【发布时间】:2013-05-21 15:35:42
【问题描述】:

下面的data:.. 行正确吗?我想将表单数据和 csrf 令牌发布到 Django 视图函数。

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

【问题讨论】:

  • 我应该指出,{{ csrf_token }} 仅在此代码出现在模板正文中时才有效。如果它在导入的 JS 文件中。它不会工作。
  • 也有解决方法。在模板文件中定义 <div id="csrf">{{ csrf_token }}</div>。在您导入的 JS 文件中,您可以将令牌作为 formData.append('csrfmiddlewaretoken', '{{ csrf_token }}'); 添加到 FormData 对象

标签: jquery ajax django


【解决方案1】:

您必须将参数添加到 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
        });
});

【讨论】:

  • @Philip007 我的错我使用: 而不是, 来分隔附加的参数(太多的rpg)。查看更新。
  • 谢谢,你拯救了我的一天
  • 对我不起作用。由于缺少令牌,我仍然得到 403。如果我注释掉“processData: false”然后我得到TypeError: 'append' called on an object that does not implement interface FormData.
猜你喜欢
  • 1970-01-01
  • 2012-01-26
  • 2019-06-01
  • 2016-01-02
  • 2018-06-05
  • 2015-12-23
  • 1970-01-01
  • 2012-07-08
  • 2012-10-11
相关资源
最近更新 更多