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 上传文件