0

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

4

2 回答 2

3

将简单的任意结构化数据从 Javascript 发送到 Python 的最简单方法是 JSON。你已经有了它的 Javascript 方面,在JSON.stringify(my_list). 你所需要的只是 Python 端。这是一行代码:

item_list_json = get_paramw(kw, 'my_list', unicode)
item_list = json.loads(item_list_json)

如果item_list在您的 JS 代码中是数字的 Javascript 数组[1, 2, 3, 4]item_list那么在您的 Python 代码中将是 ints 的 Python 列表[1, 2, 3, 4]

(好吧,您还必须import json在脚本的顶部,所以我猜它是两行。)

于 2013-08-16T23:47:04.807 回答
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键作为列表(可能是空列表)返回。

于 2013-08-17T00:53:32.703 回答