<p>您应该能够使用以下工具:</p>
<pre><code>var checkIds = [];
$(document).on("click","#group_save",function(){
$("#candidate-data tr").each(function(index,rowhtml){
var checked= $('input[id="groups"]:checked',rowhtml).length;
checkIds = jQuery.unique(checkIds)
if (checked==1){
checkIds.push($('.hideMe',rowhtml).text());
}
});
var groupName = $('input:text[name="group_name"]').val();
$.ajax({
url: "{% url 'userinfo:groups' %}",
type: "POST",
data: {
"gname": gname,
"checkids": checkIds.slice(0)
},
dataType: 'json',
traditional: true,
success: function(){
notyfy({
type: "success",
layout: "topCenter",
text: "Saved",
timeout: 5000
});
}
});
checkIds.length = 0;
});
</code></pre>
<p>然后在python方面只需使用:</p>
^{pr2}$
<p><br/></p>
<h3>简短的解释</h3>
<p>首先,jQuery为您处理数据对象的转换,因此实际上不需要使用<code>JSON.stringify</code>或其他任何东西对其进行预处理,除非您要向服务器发送非常特定的格式。通过设置<code>traditional: true</code>,您要求jQuery使用以下格式转换数组参数:</p>
<pre><code>checkids=value&checkids=value&checkids=value
</code></pre>
<p>而不是:</p>
<pre><code>checkids[]=value&checkids[]=value&checkids[]=value
</code></pre>
<p>这一点很好地解释了<a href="https://stackoverflow.com/questions/5497093/what-is-traditional-style-of-param-serialization-in-jquery#answer-5497151">here</a>和{a2},但长短不一的是python/django支持使用<code>.getlist()</code>开箱即用的param序列化的“非方括号”形式。在</p>
<p>噢,<code>checkIds.slice(0)</code>(它创建了数组的一个副本)的原因仅仅是因为您稍后要设置<code>checkIds.length = 0;</code>,我脑子里的妄想症告诉我,如果ajax调用在稍后的执行周期中触发,那么如果我使用的是直接引用而不是副本,那么数组将是空的。这是极不可能的,因为ajax调用应该在被请求时立即触发,但是在处理像jQuery这样的黑盒或库时,我总是过于谨慎。。。你不应该迎合我的妄想症,而且很有可能安全地使用:</p>
<pre><code> data: {
"gname": gname,
"checkids": checkIds
},
</code></pre>