2017-02-01 132 views
0

你好人我试图从jquery传递一个变量到视图试图返回在DOM中的值但它不适用于我。Django Ajax Post无法正常工作

我需要一只手。

这是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> 

Views。

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) 

我在做什么坏事? 谢谢你们。

+0

当你运行这段代码时会发生什么?响应中弹出“Not ajax”? – dahrens

+0

究竟是什么问题? 'request.POST'中的内容等 – yedpodtrzitko

+0

if区块内部缺少'return'。或者你应该做'message = nombre' – dahrens

回答

0

您没有在POST数据中正确传递csrf标记。您的数据应该是这样的:

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

的问题是,{% csrf_token %}又使得整个输入,但是你只需要这是您的形式呈现里面输入的值。

0

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

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

荣誉给https://stackoverflow.com/a/13048311/6599471