jQuery Post数据不起作用

时间:2013-08-04 16:32:34

标签: jquery django jquery-post

我正在尝试发布复选框的值,但无法这样做。它首先收集一个数组中的所有复选框(datas - 在使用console.log(datas)进行测试后工作正常),然后集体发送它们。但是我无法发布数据。我得到一个空数组。我哪里错了?

views.py

if request.method == 'POST':
    selected_users = request.POST.getlist('users[]')
    return HttpResponse(selected_users)

的jQuery

$(document).ready(function(){
    $('#submit').click(function() {
        var datas = new Array();
        var i = 0;

        $("input[type=checkbox]:checked").each(function() {
            datas[i] = $(this).val();
            i++;
        });   

        console.log(datas)   //works fine
        $.post("get_data/", {'users[]': datas}, function(data){
            alert(data);
        });   
    });    
})

urls.py

urlpatterns = patterns('',
    url(r'get_data/','apps.api.views.get_data', name = 'grabhalo_get_data'),
)

复选框

{% for user in users %}
    <input type="checkbox" class="check" value="{{user.id}}" />{{user.name}}<br>    
{%endfor%}

    <form id="form" method="POST" action="#">
       {% csrf_token %}
       <input type="text" class="span8 search-query" placeholder="Type here..." name="chat">
       <input type="submit" value="Send" class = "btn btn-primary" id = "submit">
   </form>

以下是查看 console.log

时的参数
users[] 1
users[] 2

我猜想views.py中有一些错误,但不确定。请帮我纠正一下。

2 个答案:

答案 0 :(得分:0)

<强> 1。缺少防止默认

取代:

$('#submit').click(function() {

使用:

$('#submit').click(function(e) {
   e.preventDefault();

<强> 2。缺少复选框的名称

<input type="checkbox" name="..."

答案 1 :(得分:0)

通过轻微的代码重新排列,您可以轻松获得正在尝试的内容

复选框

<form id="form" method="POST" action="#">
    {% for user in users %}
    <input type="checkbox" class="check" name='users' value="{{user.id}}" />{{user.name}}<br>    
    {% endfor %}

    {% csrf_token %}
    <input type="text" class="span8 search-query" placeholder="Type here..." name="chat">
    <input type="submit" value="Send" class = "btn btn-primary" id = "submit">
</form>

的jQuery

$(document).ready(function(){
    $('#form').submit(function(evt) {
        evt.preventDefault();

        $.post("get_data/", $(this).serialize(), function(data){
            alert(data);
        });   
    });    
})

请参阅docs on jQuery.serialize(),特别注意

  

注意:只有“成功控件”被序列化为字符串。没有   由于表单未提交,因此提交按钮值已序列化   使用按钮。对于要包含在表单元素中的值   序列化字符串,该元素必须具有name属性。价值来自   复选框和单选按钮(“radio”或“checkbox”类型的输入)   仅在检查时才包括在内。来自文件选择元素的数据   没有序列化。

views.py

if request.method == 'POST':
    selected_users = request.POST.getlist('users')
    return HttpResponse(selected_users)