我有一个javascript代码,它获取了几个复选框的值,并将它们的值(整数)插入到数组中:
var my_list = $('.item:checked').map(function(){return $(this).attr('name');}).get();
我想将这个javascript数组作为参数传递给python函数。这就是我现在用ajax和jQuery做的事情:
$.ajax({
url : "{{tg.url('/foo/bar')}}",
data : {
my_list: JSON.stringify(my_list),
...
},
在python方面,我有这个代码,以获取参数:
item_list = get_paramw(kw, 'my_list', unicode)
这是有效的,但是我没有接收数组作为整数数组,而是作为包含“[”,“]”,“,”和“”“符号的单个字符串,我将不得不解析和我认为这不是处理这种情况的最优雅方式。
如何在python中接收整数的javascript数组作为整数数组(而不是字符串)?
答案 0 :(得分:3)
将简单的任意结构数据从Javascript发送到Python的最简单方法是JSON。你已经在JSON.stringify(my_list)
中获得了它的Javascript方面。你需要的只是Python方面。这是一行代码:
item_list_json = get_paramw(kw, 'my_list', unicode)
item_list = json.loads(item_list_json)
如果JS代码中的item_list
是数字[1, 2, 3, 4]
的Javascript数组,则Python代码中的item_list
将成为整数[1, 2, 3, 4]
的Python列表。
(嗯,你还必须在脚本的顶部import json
,所以我猜这是两行。)
答案 1 :(得分:1)
正确的方式为一个密钥发送多个值
data: {
my_list: my_list,
},
traditional: true
...
假设my_list = [ 1, 2, 3 ]
,这会产生查询字符串/ POST数据
my_list=1&my_list=2&my_list=3
如果没有traditional
标志,结果将是
my_list[]=1&my_list[]=2&my_list[]=3
当然有效,但在TurboGears中,您需要以my_list[]
的形式访问它。
另一方面,我不确定TG关键字参数是否传递多个值;如果你得到kw中的单个值,你可以使用request.getall('foo')
作为列表返回所有foo
个键(可能是一个空列表)。