JQuery:一起发布 FormData 和 csrf 令牌

Posted

技术标签:

【中文标题】JQuery:一起发布 FormData 和 csrf 令牌【英文标题】:JQuery: post FormData AND csrf token together 【发布时间】: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 对象 【参考方案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.

以上是关于JQuery:一起发布 FormData 和 csrf 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 jquery ajax 与 FormData 一起发送 AntiForgeryToken (CSRF)

使用 FormData 和 jQuery 上传 Ajax 大文件无法发布数据

如何使用 jQuery.ajax 和 FormData 上传文件

使用 jquery AJAX 和 FormData 上传文件

如何使用 JQuery 和 formData 正确获取表单数据

无法使用 Php 和 jquery ajax 在 mysql 中插入 FormData