我尝试后的检查框的值,但未能如愿。 它首先收集所有在数组中选中的复选框( selected_users
首位,而其在与测试它工作正常, alert
功能),然后将它们统称。 但我无法发布数据。 我得到的错误是关键“用户”没有找到。 我要去哪里错了吗? 我该如何修改jQuery插件我的帖子陈述?
View.py
DEF GET_DATA(请求):
if request.method == 'POST':
selected_users = request.POST['users']
return HttpResponse(selected_users)
urls.py
urlpatterns = patterns('',
url(r'get_data/','apps.api.views.get_data', name = 'grabhalo_get_data'),
)
jQuery的
$(document).ready(function(){
$('#submit').click(function() {
var selected_users = $('input[type=checkbox]:checked').map(function(_, el) {
return $(el).val();
}).get();
alert(selected_users); // works fine
$.post("get_data/",{users:selected_users}); // not able to post
});
})
复选框
{% for user in users %}
<input type="checkbox" class="check" value="{{user.id}}" />{{user.name}}<br>
{%endfor%}
<form id="form" method="POST" action="/get_data/">
{% 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的$。员额功能是好的,问题是在Django视图得到的值。 您张贴值的数组-让他们使用getlist()
的POST的QueryDict功能。 所以,你的看法是这样的:
if request.method == 'POST':
selected_users = request.POST.getlist('users[]')
return HttpResponse(selected_users)
请参见:
QueryDict.getlist(键,默认)
Django的-的GetList()
你为什么不试试你的帖子是这样的:
$(document).ready(function(){
$('#submit').click(function() {
var selected_users=[];
var $inputs = $('.check');
$inputs.each(function() {
selected_users.push( $(this).val());
});
alert(selected_users); // works fine
$.post("get_data/",{"users" : selected_users},function(response)
{
alert(response);
});
})
试试这个在您的view.py:
if request.method == 'POST':
selected_users = request.POST.get("selected_users", "")
return HttpResponse(selected_users)
当您提交表单,您将需要阻止默认动作。 否则,你的页面刷新的发生排尿的职位。
还可以使用序列化阵列,将它们转换成一个数组。 尝试这个
$(document).ready(function(){
$('#submit').click(function(e) {
e.preventDefault();
// Will only serialize the checked values by default
var selected_users = $('input[type=checkbox]').serializeArray();
console.log(selected_users);
$.post("get_data/",{'users[]':selected_users});
});
})
您可以使用$.ajax
如果你想与更多的选择,而不是工作
$.ajax({
url : 'get_data',
data : {'users[]' : selected_users},
dataType: "set it to the type you are expecting".
type : 'post'
}).done(function(data, status, xhr) {
console.log(data)
}).fail(function(xhr, status, error) {
console.log("Error status : "+ status + "-- error : " + error);
});
你只需要合并@Aditya和@Yurly答案:
脚本
function get_csrf_token(){
return $("input[name='csrfmiddlewaretoken']").val();
}
$(document).ready(function(){
$('#submit').click(function() {
var datas = new Array();
var i = 0;
var csrf_token = get_csrf_token();
$("input[type=checkbox]:checked").each(function() {
datas[i] = $(this).val();
i++;
});
#make sure the url is correct
$.post("get_data/", {'users[]': datas, 'csrfmiddlewaretoken': csrf_token}, function(data){
alert(data);
});
});
})
views.py
if request.method == 'POST':
selected_users = request.POST.getlist('users[]')
return HttpResponse(selected_users)