2017-02-01 20 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> 

ビュー。

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

私はこの問題は、あなたのテンプレートをきちんと正しくレンダリングしていないことと関係していると思います。これら2つの方法のいずれかを使用してテンプレートを再描画してみてください。

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へ。

関連する問題