8

次のようなコードがあります。

$(document).ready(function(){
    $('#error').hide();
    $('#submit').click(function(){
        var name = $("#name").val();
        if (name == "") {
            $("#error").show("slow");
            return false;
        }
        var pass = $("#password").val();
        if (pass == "") {
            $("#error").show("slow");
            return false;
        }
        $.ajax({
            url: "/ajax/",
            type: "POST",
            data: name,
            cache:false,
            success: function(resp){
                alert ("resp");
            }
        });
    });
});

そしてDjangoで見る:

def lat_ajax(request):
    if request.POST and request.is_ajax:
        name = request.POST.get('name')
        return HttpResponse(name)
    else :
        return render_to_response('ajax_test.html',locals())

私の間違いはどこですか?私は Django の初心者です。助けてください。

4

6 に答える 6

20

jquerydataType: "json"呼び出しを入れます。resp は JavaScript オブジェクトになります。

$.ajax({
    url: "/ajax/",
    type: "POST",
    data: name,
    cache:false,
    dataType: "json",
    success: function(resp){
        alert ("resp: "+resp.name);
    }
});

Django では、データを含む json でシリアル化された辞書を返す必要があります。content_type は である必要がありますapplication/json。この場合、一部のローカル変数を json でシリアル化できない可能性があるため、locals トリックはお勧めしません。これにより例外が発生します。is_ajaxも関数であり、呼び出す必要があることに注意してください。あなたの場合、それは常に真実です。request.methodではなくテストも行いますrequest.POST

import json
def lat_ajax(request):

    if request.method == 'POST' and request.is_ajax():
        name = request.POST.get('name')
        return HttpResponse(json.dumps({'name': name}), content_type="application/json")
    else :
        return render_to_response('ajax_test.html', locals())

更新: Jurudocs で述べたように、csrf_token も読むことをお勧めする原因になる可能性があります: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

于 2013-02-01T08:43:13.180 に答える
9

dictを作成してjsonに解析するのはどうですか?

name = request.POST.get('name')
dict = {'name':name}
return HttpResponse(json.dumps(dict), content_type='application/json')
于 2013-02-01T08:20:31.530 に答える
2

タイプミスがあります:

    success: function(resp){
        alert ("resp");
    }

する必要があります

        success: function(resp){
            alert (resp);
        }

また、csrf に関しては、次のようなヘッダーを使用する必要があります。

    $.ajax({
            url: "some-url",
            headers: {'X-CSRFToken': '{{ csrf_token }}'},
于 2016-06-09T19:19:01.383 に答える
1

これを行うだけです...(Django 1.11)

from django.http.response import JsonResponse

return JsonResponse({'success':False, 'errorMsg':errorMsg})

jQuery で json 部分を処理する場合は、次のようにします。

$.ajax({
    ...
    dataType: 'json',
    success: function(returned, status, xhr) {
        var result = returned['success']; // this will be translated into 'true' in JS, not 'True' as string
        if (result) { 
            ...
        else {
            ...
        }
    }
});
于 2018-03-15T11:23:45.887 に答える
0
$(document).ready(function(){
    $('#error').hide();
    $('#submit').click(function(){
        var name = $("#name").val();
        if (name == "") {
            $("#error").show("slow");
            return false;
        }
        var pass = $("#password").val();
        if (pass == "") {
            $("#error").show("slow");
            return false;
        }
        $.ajax({
            url: "/ajax/",
            type: "POST",
            data: { 
                'name': name, 
                'csrfmiddlewaretoken': '{{csrf_token}}'
            }, 
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            success: function(data) { 
                alert(data);
            },
            error: function(ts) { 
                alert(ts);
            }
        });
    });
});


def lat_ajax(request):
    if request.POST:
        name = request.POST['name']
        return HttpResponse(name)
    else :
        return render_to_response('ajax_test.html',locals())
于 2013-02-01T12:03:48.927 に答える