2017-03-15 1 views
1

Info:私はpython 3.6とDjango 1.10.6を使用しています。Jqueryは空のデータをDjangoに送ります

私はページの数を変更する簡単なdictを送信しようとしますが、私はフォームを使用しません。だから私は彼らがXMLHttpRequestとそれの仕事を使用して多くのチュートリアルを読む。しかし、私の状況では、私は空のクエリを受け取ります。

Template.html:

<p> You select the page {{ page }} </p> 

<ul class="pagination" > 
    <li><a href="#" value={{ page|add:"-1" }}>&laquo;</a></li> 
    <li><a href="#" value=0>1</a></li> 
    <li><a href="#" value=1>2</a></li> 
    <li><a href="#" value=2>3</a></li> 
    <li><a href="#" value=3>4</a></li> 
    <li><a href="#" value=4>5</a></li> 
    <li><a href="#" value={{ page|add:"1" }}>&raquo;</a></li> 
</ul> 

<script language="javascript"> 
    $('ul.pagination li a').on('click', function(e){ 
     e.preventDefault(); 
     var val = { 
       'page': $(this).attr('value'), 
     } 

     var page = new XMLHttpRequest(); 
     xhr.open('POST', '/index/', true); 
     xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     xhr.setRequestHeader('X-CSRFToken', '{{ csrf_token }}'); 
     xhr.send(val); 
    }) 
</script> 

Views.py:私は常に空のクエリを持っている私のコンソールを表示し、それは通常のpage=0

def index(request): 
    page = request.POST.get('page', 0) #POST ARE YOU HERE ? 
    print('[TEST]', request.POST, page) 
    return render(request, "site/index.html", 
      {'page': page}) 

コンソールログ:私は{'page':'1'}のような辞書は、上のクリックで送信受信する

[TEST] <QueryDict: {}> 0 

a

答えて

1

send() methodは、多くのデータタイプを受け入れますが、それは受け付けませんので、あなたの問題がありますオブジェクト。

あなたが代わりに文字列を提供することで、あなたの問題を解決できます。

var val = 'page=' + $(this).val(); 

はここval()の好ましい使用に注意してください。あなたはJSONとして値を送信する場合は

また、手動で文字列化する必要があります:

var val = JSON.stringify({ page: $(this).val() }); 
+0

それは辞書のように送られたデータをフォーマットすることが可能ですか? – Buky

+0

何かが可能ですが、送信する必要のあるフォーマットは、モデルバインダーが期待しているものによって異なります。 –

+0

JSONは完璧です。 – Buky

関連する問題