Django视图无法解析AJAX提交的FormData,返回WebKitFormBoundary内容
问题解决方法
问题根源
你提交的AJAX请求配置存在参数名拼写错误:jQuery的$.ajax方法中,指定请求内容类型的参数为小写开头的contentType,你代码中写的大写开头的ContentType属于无效参数,无法被jQuery识别。
这会导致请求头的Content-Type没有被正确设置为带边界值的multipart/form-data格式,Django无法正常解析表单数据,只能将整个请求体作为单个键值对存入QueryDict,所以你无法通过参数名拿到对应值。
另外你的提交事件没有阻止表单默认跳转行为,也可能导致请求异常。
解决步骤
- 修正AJAX配置的参数名,将
ContentType: false改为contentType: false - 在提交事件中添加阻止默认行为的逻辑,避免页面自动跳转
- 建议为FormData变量添加局部变量声明,避免全局变量污染
修正后的完整JS代码如下:
messageSENDER.onsubmit = (e) => { // 阻止表单默认提交跳转 e.preventDefault(); const formdata = new FormData(messageSENDER); $.ajax({ headers: {"X-CSRFToken": document.querySelector('[name=csrfmiddlewaretoken]').value}, method: 'POST', processData: false, contentType: false, data: formdata, url : '/send/message/', success: function(m){ messageSENDER.reset() } }) }
验证说明
修改后不需要调整原有Django视图代码,直接通过request.POST.get('partnerPK')、request.POST.get('content')就可以正常获取提交的参数值。如果有上传的文件,可通过request.FILES.get('files')获取。
内容的提问来源于stack exchange,提问作者محمد ناصر
相关产品推荐
相关产品推荐

