2

Django フレームワークで ajax リクエストを作成したいと考えています。ただし、jsonでクライアントからデータを取得するために渡しません。Jsonを使用しない場合に機能します。ajax で dataType:'json' を {'a': 'value'} と共に使用すると、view.py で取得できず、結果は何もありません...ただし、data:$( を使用するとthis).serializeArray() の ajax では、request.POST で結果を取得できます。ただし、データをカスタマイズして、フォームからのデータ以外のデータを view.py に送信する必要があります。{'a', 'mydata', 'form': myformdata} を送信したいのですが... 方法はありますか?

テンプレート:

<form id="ajax2" action="/seghca/test-post/" method="post">{% csrf_token %}
Nom : <input type="text" name="nom" value="" id="nom"/><br/>
prenom : <input type="text" name="prenom" value=""/><br/>
<input type="submit" value="Envoyer"/>
</form>


<div id="result"></div>

JavaScript:

$(document).ready(function(){


        // POST AJAX
        $("#ajax2").submit( function() {
        var urlSubmit = $(this).attr('action');

        var data = $(this).serializeArray();
        data.push({
                key:   "keyName",
                value: "the value"
            });
        $.ajax({  
            type: "POST",
            url: urlSubmit,
            dataType: "json",               
            data      : data,//$(this).serializeArray(),
            success: function(response){
                 var json_response = JSON.parse(response);
                    // now get the variables from the json_response
                    $('#result').html(json_response.html);
            }
        });
        return false;
    });

    });

view.py (ajax は test_post ビューを起動します。home2 はフォーミュラーのビューです):

from datetime import datetime
from django.http import HttpResponse, Http404
from django.shortcuts import redirect, render
from seghca.models import Article


from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.template import RequestContext
from django.views.decorators.csrf import csrf_exempt
import json

def home2(request):
    return render_to_response('seghca/form.html', context_instance=RequestContext(request))

@csrf_exempt
def test_post(request):
    data = {'html': request.POST['key']}
    return HttpResponse(json.dumps(data), mimetype="application/json")
4

3 に答える 3

1

ajax ビューを使用している場合は、データをビューから json 形式で返す必要があります。

data = {'html': request.POST['input']}
return HttpResponse(json.dumps(data), mimetype="application/json")

次に、クライアント側で最初に応答を解析する必要があります。

success: function(response){
    var json_response = JSON.parse(response);
    // now get the variables from the json_response
    $('#result').html(json_response.html);
}

3番目に、フォームデータをさらに情報とともに渡す必要がある場合は、次のようにします。

var data = $(this).serializeArray();
data.push({
    key:   "keyName",
    value: "the value"
});

4 番目に、csrfトークンがありません。

于 2013-08-24T11:45:52.870 に答える
0

私はあなたの同じニーズを持っています。私の解決策は次のとおりです。

AJAX リクエスト:

    var posturl = $('#'+formid).prop('action');

$.ajax({
        async:false,
        type: "POST",
        dataType: "json",
        contentType: "application/x-www-form-urlencoded",
        url : posturl,
        data : $('#'+formid).serialize() + '&mode=ajax', //&mode=ajax is my custom data
        success:function(response){             

                console.log(response);
                        alert(response.message);

        },
        timeout:10000
});

views.py で:

        data = {'error': '0', 'message': 'all was ok'}
        return HttpResponse(json.dumps(data), mimetype="application/json")

上記はあなたのために働くはずです。私のテストはDjango 1.6とPython 2.7.5でした

于 2014-01-20T12:11:18.910 に答える
0

data: data,に変更data: {'data': JSON.stringify(data)},

POST['data']そして、django経由でシリアル化されたバージョンのデータにアクセスできるようになります。これを django で使用する場合は、デシリアライズする必要があることに注意してください。たとえば、json.loads(POST['data'])

于 2013-11-20T09:00:55.980 に答える