在.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);
});
}
);
当我调试查询字符串时,我只看到其中一个变量。谁能给我一个解决我问题的简单方法?
此致
答案 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说,它必须是一个序列,这个列表当然是)