我使用的应用程序允许我以异步方式从html模板发布表单回复。我已经确认我的POST工作正常,但我在回复时遇到问题。这是相应Django视图的主要代码:
#views.py from the app........
def post(self, request, *args, **kwargs):
published = Form.objects.published(for_user=request.user)
form = get_object_or_404(published, slug=kwargs["slug"])
form_for_form = FormForForm(form, RequestContext(request),
request.POST or None,
request.FILES or None)
if not form_for_form.is_valid():
form_invalid.send(sender=request, form=form_for_form)
else:
# Attachments read must occur before model save,
# or seek() will fail on large uploads.
attachments = []
for f in form_for_form.files.values():
f.seek(0)
attachments.append((f.name, f.read()))
entry = form_for_form.save()
form_valid.send(sender=request, form=form_for_form, entry=entry)
self.send_emails(request, form_for_form, form, entry, attachments)
if not self.request.is_ajax():
return redirect(form.redirect_url or
reverse("form_sent", kwargs={"slug": form.slug}))
context = {"form": form, "form_for_form": form_for_form}
return self.render_to_response(context)
def render_to_response(self, context, **kwargs):
if self.request.method == "POST" and self.request.is_ajax():
json_context = json.dumps({
"errors": context["form_for_form"].errors,
"form": context["form_for_form"].as_p(),
"messag": context["form"].response,
})
if context["form_for_form"].errors:
return HttpResponseBadRequest(json_context,
content_type="application/json")
return HttpResponse(json_context, content_type="application/json")
return super(FormDetail, self).render_to_response(context, **kwargs)
这是我负责帖子的html模板的javascript部分:
//My html template.....
<script type="text/javascript">
var frm = $('#theform');
frm.submit(function () {
$.ajax({
type: frm.attr('method'),
url: frm.attr('action'),
headers: {'X-CSRFToken': '{{ csrf_token }}'},
data: frm.serialize(),
dataType: 'json',
success: function (data) {
alert('TESTING...');
var json = $.parseJSON(data);
alert(json);
},
error: function(data) {
$("#responsediv").html("Something went wrong!");
}
});
return false;
});
所以我可以发布好(我验证我的提交正确存储在服务器端)但我的问题在于success: function (data)
部分,因为我在解析json响应时遇到问题。我已经查看了很多关于此问题的其他问题,并按照人们的提示进行了操作,但我似乎无法解析json的响应。在这种情况下,我会收到alert('TESTING...');
的提醒,但var json = $.parseJSON(data);
不起作用,并且不会发生以下提醒。
我不明白问题是什么。如何解决这个问题?
我已经确认我实际上是从服务器获取json成功响应,因为如果我尝试打印&#34;数据&#34;,我会得到{{1 }}
在Chrome的控制台中,我收到错误消息:
Uncaught SyntaxError:位置1的JSON中出现意外的标记o 在Function.parse [as parseJSON]()
答案 0 :(得分:0)
我发现了自己的错误。通过输入dataType: 'json',
json已经被解析,所以当它完全没必要时我有效地尝试再次解析它。 “解决方案”就在这里:
我不记得在发布问题之前查找我得到的具体错误,对不起。我只是寻找关于Django AJAX POST返回的一般性问题。 Mods请删除此/标记为重复或其他内容。我非常感谢上面的评论。