【发布时间】:2020-07-08 12:46:41
【问题描述】:
我正在尝试使用 jQuery/Ajax 将 POST 数据添加到我的 Django 相关模型中。尽管遇到了许多关于该主题的问题,但我还是无法完成在表格中发布数据的工作。
如果我使用普通格式 submit,数据会保存在两个表中,但是在使用 ajax 时,我会不断收到 400 (Bad Request)。
我处理 ajax 请求的 view 是:
def ajxCreateRtp(request):
if request.is_ajax and request.method == "POST":
form = RtpCreateForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
formset = CreateRtpFormset()
if formset.is_valid():
formset_instance = formset.save()
instance = form.save()
ser_instance = serializers.serialize('json', [ instance, formset_instance, ])
return JsonResponse({"instance": ser_instance}, status=200)
else:
return JsonResponse({"error": form.errors}, status=400)
return JsonResponse({"error": ""}, status=400)
控制台中的错误如下:
POST http://127.0.0.1:8000/.../.../.../rtp/ajax/add/ 400(错误请求) 发送@jquery-3.4.1.js:9837 ajax@jquery-3.4.1.js:9434(匿名)@ (index):1011 dispatch @ jquery-3.4.1.js:5237 elemData.handle @ jquery-3.4.1.js:5044
注意:如果我从 ajxCreateRtp 视图中删除 .formset 部分,标题表单中输入的数据将保存到父模型。
模板中的jQuery/Ajax脚本是:
$(function() {
$('#rtpForm').submit(function(e) {
e.preventDefault();
var data = $(this).serialize();
// console.log(data);
$.ajax({
type: 'POST',
url: "{% url 'ajax_add_rtp' %}",
data: data,
success: function(response) {
console.log('Data Saved');
},
error: function (response) {
console.log('Problem encountered');
}
});
});
});
有人可以帮我解决这个问题吗?
【问题讨论】:
-
400 响应的正文中有什么内容?看起来您的表单无效,并且您在响应正文中返回表单的验证错误。这些错误应该可以解释发生了什么。
-
@schillingt By body 我是否了解控制台的Network 中各个选项卡中包含的数据?例如。常规、响应标头等?
-
是的,控制台中的网络选项卡,然后查找对 /rtp/ajax/add 的请求,单击它并查看请求以查看通过线路发送到服务器的内容,然后然后响应以查看服务器响应的内容。响应端应该包含错误。
-
@schillingt 对不起。第一次提到控制台的这一部分。我可以看到标签 中有部分,即 General、Response Headers、Request Headers、Form Data >标题。在 Response 选项卡下,我看到一个输出:
{"error": ""}。我可以将问题中 General 选项卡的内容复制为 Edit 吗?谢谢。 -
@schillingt 我指的是 Headers 选项卡中的内容。
标签: jquery django ajax django-models