【问题标题】:Django- jQuery AJAX POST response- trouble parsing JSONDjango-jQuery AJAX POST 响应-解析 JSON 时遇到问题
【发布时间】:2016-11-21 01:04:59
【问题描述】:

我正在使用一个应用程序,该应用程序允许我从 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 成功响应,因为如果我尝试打印“数据”,我会得到[object Object]

在 Chrome 的控制台中出现错误:

未捕获的 SyntaxError:位置 1 处 JSON 中的意外标记 o 在 Function.parse [as parseJSON] ()

【问题讨论】:

  • 只是为了测试一下,你可以试试JSON.parse()的方法吗? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。同样在Developer Tools &gt; Network &gt; [XHR item in list] Preview 中,您应该能够看到已解析的文本格式的 JSON。
  • 你能不能先console.log(data),然后再解析为 json 并在 Chrome 中的 Developer Tools &gt; Console 中查找输出?
  • 同时,我只是通过在这里查找错误找到了答案,但我忘记了这样做。我很感谢你们的cmets

标签: javascript jquery json ajax django


【解决方案1】:

我发现了我的错误。通过输入dataType: 'json',,json 已经被解析,所以当它完全没有必要时,我有效地尝试再次解析它。 “解决方案”在这里:

I keep getting "Uncaught SyntaxError: Unexpected token o"

我不记得在发布问题之前查找我遇到的具体错误,对不起。我只是寻找有关 Django AJAX POST 返回的一般问题。模组请删除此/标记为重复或其他内容。我很欣赏上面的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多