django ajax formdata,Django后端FormData()对象总是空

我想通过AJAX(只是JS,没有jQuery)上传HTML表单。表单由我的模板通过添加三个组件组装而成:csrf标记,ModelForm和常规Django表单(forms.Form)。模型表单{{form.as_p}}包含表单的可见部分,而{{order_form}}表单包含一些隐藏的字段。我的模板的形式部分看起来是这样的:Django后端FormData()对象总是空

{% csrf_token %}

{{ form.as_p }}

{{ other_form }}

我已经尝试从

标签删除加密类型(我在另一个问题的答复读取FORMDATA()自动将此),但无济于事。

当按下submit按钮时,调用JS函数submitBlodEntryForm(),传递表单ID和url以用于AJAX请求。该JS功能的代码在这里:

function submitThisForm(form_ID, url){

var submit_form = document.getElementById(form_ID);

var formData = new FormData(document.getElementById(form_ID));

httpRequest = new XMLHttpRequest();

if (!httpRequest){

alert("Giving up, cannot create an XMLHTTP instance.");

return false;

};

var url = "/submit_blog_entry/";

var sendCSRFtoken = "csrfmiddlewaretoken="+String(getCookie('csrftoken'));

var sendContent = sendCSRFtoken+"&"+formData;

httpRequest.onreadystatechange = alertContents;

httpRequest.open('POST', url, true);

httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//httpRequest.send();

httpRequest.send(sendContent);

// alternatively: httpRequest.send(formData);

}

AJAX请求被提交给服务器并且被服务器接收(一个Django视图)。如果我没有手动添加上面的JS代码(变量sendContent)中显示的csrf标记并只发送formData,我会得到一个403错误,显然是因为服务器找不到标记。它应该是这样的形式,虽然部分...

当我接收到的数据绑定到相应的表单,验证失败:

form = ThisForm(request.POST)

if form.is_valid():

#do something

如果我打印的内容是在request.POST,我在终端中获得以下内容:

显然,FormData对象是空的。我还以为这是因为我得到两个必填字段以下两个错误在我的形式(通过使用form.errors.as_data()):

[ValidationError(['This field is required.'])]

到底哪里出问题了?我搞乱了模板,FormData()不生成有用的数据吗?我错误地创建了AJAX请求吗?或者是服务器端的问题(尽管目前我几乎没有做任何事情)?

谢谢任何​​帮助,非常感谢!

2016-04-03

S. Ju.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值