我正在使用django并且有一个搜索结果页面,我希望能够按类别使用ajax(jquery)请求进行过滤。页面侧面有一个过滤条,当有人选择某些类别并单击提交时,相应的结果应显示在页面上。我的代码看起来像这样:
<input type="checkbox" name="category1" value="1" />
<input type="checkbox" name="category2" value="2" />
<input type="button" name="submit" onclick="{
var cats = new Array();
$(input[type=checkbox]:checked).each(function() {
cats.push($(this).val());
});
$.getJSON('page.html', {'cats':cats}, function(data) {...});
}" />
但是在django视图中,当我尝试读取cats数组时,它返回500错误。但是,我可以毫无问题地将标量和字符串传递给django视图。
有什么想法?有没有更优雅的jQuery方法可以在不使用javascript数组的情况下执行此操作?
答案 0 :(得分:1)
您可以使用jQuery的serializeArray()
方法,而不是手动获取字段值,该方法将一组字段转换为可以作为JSON发送的数组。请注意,您可能希望两个复选框都具有相同的名称,因此当它被序列化时,它将成为Django将其解释为列表的内容。
正如史蒂夫所说,为了进一步提供帮助,我们需要知道视图的作用以及错误是什么。
答案 1 :(得分:1)
搞定了 - 我下载了jquery-json插件,将我的数组编码为json obect以发送到django,然后在django视图中使用simplesjon.loads()将该json对象转换为python列表。然而,事实上它花了这么多步骤和jQuery本身甚至没有json编码功能仍然让我觉得必须有一个更优雅的方式 - 如果有人有任何洞察力,我很乐意听到它。
感谢Daniel指出我正确的方向。
答案 2 :(得分:0)
我想解决方法是将数组转换为字符串,例如javascript:
a = new Array(0,1,2,3,4);
[0, 1, 2, 3, 4]
a.join(" ")
"0 1 2 3 4"
然后你可以将它传递给python后端,拆分它并重建你需要的数据结构......