如何将一个整数数组作为参数从javascript传递给python?

时间:2013-08-16 23:29:17

标签: javascript jquery python ajax

我有一个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数组作为整数数组(而不是字符串)?

2 个答案:

答案 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个键(可能是一个空列表)。