0

Django を使用してサーバーに簡単な POST リクエストを送信しようとしています。テストするためだけに別の API クライアントを使用して post 呼び出しを行うことができますが、jquery を使用すると、何も返されないか、コールバック関数からアラートが表示されます。以下は私のjqueryとdjangoのコードです。API呼び出しを置き換えましたが、それが正しいことはわかっています。

$(document).ready(function(){
  $("#signInSubmit").click(function(){
    alert("Posting email: "+$("#email").val()+" guests: "+$("#guests").val());
    $.post("apicall",
    {
      'email':$("#email").val(),
      'guests':$("#guests").val(),
      'event':"1"
    },
    function(data,status) {
               alert("Data: " + data + "\nStatus: " + status);
    });
  });
});

そして、これはヒットするdjangoビューです:

@csrf_exempt
def participant_info(request):
    if request.method == 'GET':
        participant_email = request.GET.get('email')
        participant = Participant.objects.get(email = participant_email)

        #serialized_obj = serializers.serialize('json', [ participant, ])

        response = HttpResponse()
        response.content = serialized_obj = serializers.serialize('json', [ participant, ])
        response['Content-Type'] = 'application/json'
        return response

        #return HttpResponse(response, mimetype="application/json")

    if request.method == 'POST':
        participant_email = request.POST.get('email', '')
        numguests = request.POST.get('guests', '')
        eventid = request.POST.get('event', '')

        participantkey = Participant.objects.get(email = participant_email)
        eventkey = Event.objects.get(id=eventid)
        per = Participant_Event_Record(guests = numguests, event = eventkey, participant = participantkey)
        per.save()

        response = HttpResponse()
        response.content = serialized_obj = serializers.serialize('json', [ per, ])
        response['Content-Type'] = 'application/json'
        return response
4

2 に答える 2

1

私が思うに、いくつかのことが起こっている可能性があります:

  1. jQuery 呼び出しでコンテンツ タイプを指定します。「appliciation/json」(http://api.jquery.com/jQuery.ajax/) と表示されていることを確認してください-www-form-urlencoded'.

  2. あなたの POST URL は URL の末尾に / が必要であり、/ のないエンドポイントに投稿しているため、Django は / URL へのリダイレクトを発行します。APPEND_SLASH 設定 (https://docs.djangoproject.com/en/1.4/ref/settings/#append-slash) を設定することでこれを無効にすることができますが、実際にはすべてのエンドポイントを常に最後に「/」で呼び出すのが最善ですですので、$.post("apicall", ...) で投稿する代わりに、$.post("apicall/", ...) を試して、それが役立つかどうかを確認してください。

それ以外の場合は、試したときに発生するエラーを投稿できますか? Django コンソールと Chrome の Javascript コンソールの両方から?

于 2012-11-14T20:58:17.403 に答える
0

気づかなかったHTMLの本文内のフォームにラップされていたことがわかりました。フォームラッパーを削除した後、それは完全に機能しました。

于 2012-11-14T22:07:15.703 に答える