7

これは基本的なことかもしれませんが、私は 2 日間費やし、数え切れないほどのチュートリアルを読みましたが、まだこれを機能させることができません。簡単に言えば、基本的なタスクを実行して、それが機能することを確認しようとしました。寄付ビューに ajax 呼び出しを送信したいと考えています。正常に通過したことがわかりますが、テンプレートも「TRUE」に更新されることを期待していましたが、「FALSE」のままです。私が感謝する助けや提案。

私のjquery...

$.ajax({
    type: "POST",
    url:"/donate/",
    data: {
    'test': 'success',
    },
    success: function(){
      alert('test')
     },
    error: function(){
        alert("Error");
});

これが私の見解です...

def donate(request):
    if request.is_ajax():
        test = "TRUE"

    if request.method == 'POST':
        form = DonateForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = DonateForm()
        test = "FALSE"

    return render_to_response('donate_form.html', {'form':form,'test':test}, context_instance=RequestContext(request))

私のテンプレートにはこれが含まれています...

<h1>{{ test }}</h1>

更新/解決策

この質問のコメントで述べたように、返されたデータに対して何もしていませんでした。成功の呼び出しを次のように更新しましたが、うまくいきました

    $.ajax({
    type: "POST",
    url:"/donate/",
    data: {
    'zip': zip,
    },
    success: function(data){            

        results = $(data).find('#results').html()               
        $("#id_date").replaceWith("<span>" + results + "</span >");

    },
    error: function(){
        alert("Error");
    },
4

3 に答える 3

12

問題はデータをどこに渡すかだと思います。使用しますFirebugか?何かを渡すかどうかをチェックするための優れたツールでPOSTあり、一般的なWeb開発のための優れたツールです。

フォームからAjax呼び出しを送信するための実用的な例を次に示します

$("#form").submit(function(event) {
        var $form = $(this),
        $inputs = $form.find("input, select, button, textarea"),
        serializedData = $form.serialize();

        $.ajax({
            url: "/donate/",
            type: "post",
            data: serializeData,
            success: function(response) {
                alert(response)
            }
        })
        event.preventDefault();
    });

そして、あなたのビューは次のようになります

if request.is_ajax() or request.method == 'POST':
        form = DonateForm(data=request.POST)
        if form.is_valid():
            return HttpResponse("Success")
        else:
            return HttpResponse("Fail")

ところで、本当にすべての追加機能が必要な場合を除いて、使用する方が簡単なように思われるので、代わり$.ajax()に使用することをお勧めします。$.post()

于 2012-04-29T09:03:05.303 に答える
3

あなたのコードに間違っていることはほとんどないと思います...

  1. csrf_token なしで Django に POST リクエストを送信しています => Django はこのリクエストに対して成功を返しません。POST リクエストで csrf_token を送信する必要があります。ファイアバグで確認。

  2. django がエラーを出していなくても、ページのコンテンツ (ブラウザ上) をどこでも変更していません... djang はこの文字列を送り返します -> "success" ... 以上です。

このようにコードを変更する必要があります。

「django.core.context_processors.csrf」を settings.py の TEMPLATE_CONTEXT_PROCESSORS に追加して、すべてのテンプレートで csrf トークンにアクセスできるようにします。

現在のテンプレート:

<html>
    <script type="text/javascript">
    $("#form").submit(function(e) {
        e.preventDefault();
        serializedData = $("#form").serialize();

        $.ajax({
           url: "/donate/",
           type: "post",
           data: serializeData,
           cache: 'false',
           dataType: "json",
           async: 'true',

           success: function(data) {
               alert(data)
           },
           error:function(data) {
               alert("error in getting from server")
           },
        });
    });  
    </script>
    <body>
        <form id="form">
            {% csrf_token %}
            {% for field in form %}
                {{ field }}
            {% endfor %}
        </form>
    <body>
</html>

ビューを寄付:

def donate(request):
    if request.method == 'POST':
        form = DonateForm(data=request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse("SuccessFully Saved")
        else:
            return HttpResponse("Error in saving")

今、あなたは見るでしょう:

  • SuccessFully Saved -> データが正常に保存された場合。
  • 保存エラー → 何らかの理由でデータが保存されなかった場合。
  • サーバーからの取得中にエラーが発生しました -> サーバーが何らかのエラーで応答した場合。
于 2012-04-30T00:48:25.887 に答える
0

このrequest.is_ajax()テストでは、HTTP_X_REQUESTED_WITH ヘッダーが存在するかどうかを確認します。このヘッダーは、リクエストを送信する前に JQuery が設定する必要があります。(XMLHttpRequest を手動で使用する場合は、そのヘッダーも手動で追加する必要があります。) 個人的には、テストが簡単で、HTTP ヘッダーに依存しない別のルートを使用することを好みます。タイプ=ajax'.

次に、に変更request.is_ajax()request.GET.get('type', null) == 'ajax'、JavaScript を に変更url:"/donate/"url:"/donate/?type=ajax"ます。

このアプローチの優れた点は、その?type=ajax文字列を任意のリクエストに追加するだけで、AJAX を使用せずにこれらの呼び出しをテストできることです。

于 2012-04-29T04:40:12.523 に答える