2017-02-01 11 views
0

Hallo Leute, ich versuche, eine Variable von Jquery zu den Ansichten zu übergeben versucht es im DOM der Wert zurück, aber es funktioniert nicht für mich.Django Ajax Post funktioniert nicht richtig

Ich brauche eine Hand.

Dies ist die HTML-Datei.

<!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> 

Aufrufe.

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) 

Was mache ich schlecht? Danke Jungs.

+0

Und was passiert, wenn Sie diesen Code ausführen? "Nicht Ajax" erscheint in der Antwort? – dahrens

+0

Was genau ist das Problem? Was ist in 'request.POST' etc. – yedpodtrzitko

+0

Es gibt eine' return' fehlt innerhalb der if-Block. Oder Sie sollten "message = nombre" tun. – dahrens

Antwort

0

Sie übergeben das csrf-Token nicht ordnungsgemäß in den POST-Daten. Ihre Daten sollten wie folgt aussehen:

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

Das Problem ist, dass {% csrf_token %} die ganze Eingabe macht wieder, aber Sie müssen nur den Wert des Eingangs, die in Ihrem Formular gerendert wurde.

0

Ich denke, das Problem hat damit zu tun, dass Sie Ihre Vorlagen nicht richtig rendern. Versuchen Sie, Ihre Vorlagen mit einem dieser beiden Ansätze neu zu rendern.

1.

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))) 

2.

from django.shortcuts import render 
def form(request): 
    return render('prueba2.html') 

Ein großes Lob an https://stackoverflow.com/a/13048311/6599471.