2016-11-21 11 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);は機能せず、次のアラートは発生しません。

問題の内容がわかりません。この問題を解決するには?

私は、「データ」を印刷しようとするならば、私はChromeのコンソールで[object Object]

を取得しますので、私はエラーを取得し、サーバからのJSON成功応答を取得し、私が実際にいることが確認できました:

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 item in list] Preview 'で、解析されたJSONをテキスト形式で見ることができるはずです。 – Aditya

+0

jsonに解析する前に 'console.log(data)'を実行して、Chromeの 'Developer Tools> Console'で出力を探しますか? – AKS

+0

一方、ここで私が忘れてしまったエラーを探して答えを見つけました。私はあなたの人のコメントを感謝します –

答えて

0

私は間違いを発見しました。 dataType: 'json',を入れることで、jsonはすでに解析されています。したがって、完全に不要なときに、私はそれを再度解析しようとしていました。 「解決策」はここにある:私は質問を投稿する前に得た特定のエラーを探すために覚えていない

I keep getting "Uncaught SyntaxError: Unexpected token o"

、私は申し訳ありません。私はちょうどDjango AJAX POSTの返品に関する一般的な質問を探しました。 Modsはこの/マークを重複したものまたは何かとして削除してください。私は上記のコメントを感謝します。

関連する問題