2016-11-21 147 views
0

我正在使用一个应用程序,允许我从HTML模板异步发布表单响应。我已验证我的POST正常工作,但我遇到了问题。这是对应的Django视图的主要代码:Django jQuery AJAX POST响应 - 解析JSON

#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的控制台我得到的错误:

Uncaught SyntaxError: Unexpected token o in JSON at position 1 at Function.parse [as parseJSON]()

+0

只是为了测试它,你可以尝试'JSON.parse()'方法吗? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse。同样在'Developer Tools> Network> [列表中的XHR项目]预览'中,您应该能够以文本格式查看解析的JSON。 – Aditya

+0

在解析为json并在Chrome中的'Developer Tools> Console'中查找输出之前,您可以只使用'console.log(data)'吗? – AKS

+0

同时我找到了答案,只是在这里找到了我忘记做的错误。我感谢你们的评论 –

回答

0

我发现我的错误。通过放入dataType: 'json', json已经被解析,所以当它完全没有必要的时候,我正在有效地试图解析它。 '解决方案'在这里:

I keep getting "Uncaught SyntaxError: Unexpected token o"

我不记得在发布问题之前找到具体的错误,我很抱歉。我只是寻找关于Django AJAX POST返回的一般问题。 Mods请删除这个/标记为重复或其他东西。我很欣赏上面的评论。