簡體   English   中英

Django-jQuery AJAX POST響應-解析JSON時遇到問題

[英]Django- jQuery AJAX POST response- trouble parsing JSON

我使用的應用程序允許我異步地從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;
});

因此,我可以POST正常(我已驗證提交的文件正確存儲在服務器端),但是我的問題出在success: function (data)部分,因為我在解析json響應時遇到了麻煩。 我已經看過許多其他問題,並遵循了人們的提示,但似乎無法解析json響應。 在這種情況下,我得到了alert('TESTING...'); ,但var json = $.parseJSON(data); 不起作用,並且不會發生以下警報。

我不明白問題是什么。 如何解決這個問題?

我已經確認我實際上正在從服務器獲取json成功響應,因為如果我嘗試打印“數據”,我會得到[object Object]

在Chrome的控制台中,出現錯誤:

未捕獲到的SyntaxError:JSON中位於Function.parse位置1處的意外令牌o [as parseJSON]()

我發現了我的錯誤。 通過輸入dataType: 'json',已經對json進行了解析,因此我在完全不必要的情況下有效地嘗試再次解析它。 “解決方案”在這里:

我不斷收到“ Uncaught SyntaxError:意外的令牌o”

很抱歉,我不記得在發布問題之前先查找特定的錯誤。 我只是在尋找有關Django AJAX POST返回的一般性問題。 國防部請刪除此/標記重復或類似的東西。 我非常感謝以上評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM