私は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]()
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
jsonに解析する前に 'console.log(data)'を実行して、Chromeの 'Developer Tools> Console'で出力を探しますか? – AKS
一方、ここで私が忘れてしまったエラーを探して答えを見つけました。私はあなたの人のコメントを感謝します –