.getJSON传递具有相同名称的变量数据

时间:2012-04-02 16:05:01

标签: jquery

在.getJSON中传递数据时遇到问题。原因是因为我需要传递具有相同名称的变量。所以,我在python中有一个客户端,我使用该代码执行此操作:

query_args = { 'name':[var1,var2,var3] }

output = urllib2.urlopen('http://'+servername+':'+port+'/'+action,urllib.urlencode(query_args,doseq=True))

如果我尝试使用.getJSON在javasctipt中执行此操作,我会尝试

$.getJSON(
    "http://servername::8001/SearchNode",
    {
        name: "name",
        name: "google"
    },
    function(data) {

        $.each(data, function(key, val) {
            console.log(key);
            console.log(val);
        });
    }   
);

当我调试查询字符串时,我只看到其中一个变量。谁能给我一个解决我问题的简单方法?

此致

1 个答案:

答案 0 :(得分:2)

要在一个变量中传递多个对象,您必须使用另一个结构。在您的情况下,您希望发送字符串名称谷歌。通过使用您的方法,您只需覆盖变量名称的值。

有多种方法可以解决这个问题。我必须说,我现在还没有使用python一段时间(所以那里的系统设计师,随时纠正我)。

想法1: 重命名js-code中的参数并在python中将它们粘合在一起。更改2个参数中的一个键,这样他们就不会覆盖...

$.getJSON(
    "http://servername::8001/SearchNode",
    {
        name1: "name", 
        name2: "google"
    },
    function(data) {...}
) 

...然后重建你的阵列......

query_args = {'name': [name1, name2] }

或者不要使用query_args,而是直接将它们处理到你的urllib.urlencode

output = urllib2.urlopen('yoururl', urllib.urlencode({'name':[name1, name2]}, True))

想法2: 这可能就是你想要做的。将两个字符串放在一个数组中并将其作为参数发送。在json.org,您可以查看通过ajax发送的各种数据结构。 在这种情况下,您的代码将如下所示:

$.getJSON(
    "http://servername::8001/SearchNode",
    {
        name: ["name", "google"]
    },
    function(data) {...}
) 

使用此方法,您可以轻松添加更多参数,而无需添加需要稍后连接的许多不同变量。 由于我不再熟悉python,我无法告诉你python将如何存储它(可能是一个列表)。但不管怎样,你应该能够在urlencode函数中处理这个问题。 (至少documentation说,它必须是一个序列,这个列表当然是)