Django Ajax Post无法正常工作

时间:2017-02-01 20:36:30

标签: jquery python html ajax django

大家好,我正在尝试将一个变量从jquery传递给视图,尝试在DOM中返回值,但它对我不起作用。

我需要一只手。

这是html文件。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">

$(function() {

$(document).on('submit', '#fomulario', function(e){
    e.preventDefault();

    $.ajax({
        type:'POST',
        url:'http://127.0.0.1:8000/form_ajax/',
        data:{ nombre:$('#nombre').val(), 
        'csrfmiddlewaretoken':'{% csrf_token %}',
                },
        sucess:function(data){
            $('#valor').html(data);

        }

    });

})  


});

</script>

</body>

<form id="fomulario"> {% csrf_token %}

<label for="Nombre">Nombre</label>
<input type="text" id="nombre">
<input type="submit">

</form>
<div id="valor"></div>



</html>

视图。

def form(request):
    return render_to_response('prueba2.html')


def form_ajax(request):
    if request.is_ajax() and request.method == 'POST':
        nombre = request.POST['nombre']
        HttpResponse(nombre)
        # message = "This is ajax"
    else:
        message = "Not ajax"
    return HttpResponse(message)

我做得不好? 谢谢你们。

2 个答案:

答案 0 :(得分:0)

您没有在POST数据中正确传递csrf令牌。您的数据应如下所示:

data:{ 
    'nombre': $('#nombre').val(),
    'csrfmiddlewaretoken': $("input[name='csrfmiddlewaretoken']").val()
}

问题是{% csrf_token %}再次呈现整个输入,但您只需要在表单内呈现的输入值。

答案 1 :(得分:0)

我认为问题与您没有正确渲染模板有关。尝试使用这两种方法中的任何一种重新渲染模板。

1

public class Test {
    private static Void method() {
        System.out.println("OK");
        return null;
    }
    public static void main(String[] args) throws Exception {
        Method method = Test.class.getDeclaredMethod("method");

        // TEST 3
        MethodInvoker.invoke(new Callable() {
            @Override
            public Object call() throws Exception {
                return invoke(method, null); // works

            }
        });
    }
    private static Object invoke(Method m, Object obj, Object... arg)
    throws ReflectiveOperationException {
        return m.invoke(obj, arg);
    }
}

2

from django.shortcuts import render_to_response
from django.template import RequestContext

def form(request):
            return render_to_response('prueba2.html', context_instance=RequestContext(request)))

感谢https://stackoverflow.com/a/13048311/6599471