我编写了一些对 Python 脚本进行 ajax 调用的 JQuery。我已经成功地在它们之间来回传递字符串,但是我从用于获取 Python 脚本中的输入的 CGI FieldStorage 对象中得到了奇怪的行为。我还设法发送一个带有键/值对的简单对象,如下所示:
deptObj = { one : '1', two : '2'};
$.ajax({
data: deptObj,
url: "simple.py",
success: function(result) { console.log("Success!"); console.log(result); },
error: function(request, error) { console.log("Error"); console.log(request); }
});
这是我的 python 脚本 simple.py:
#!/usr/bin/env python
import json
import cgi
import cgitb
print "Content-type: application/json\n\n"
cgitb.enable() # display error messages in web browser
fs = cgi.FieldStorage()
print json.dumps(fs.keys())
当我运行 javascript 时,它会正确打印出我的对象中的键,即["two", "one"]
(我不确定它们为什么被反转)。我还可以通过将 simple.py 的最后一行替换为print json.dumps(fs["one"].value)
.
但是,当我尝试制作多级对象(对象中的对象)时,我会遇到奇怪的行为。例如,我保留了我已经创建的 deptObj,然后传递data: { departments: deptObj}
给 ajax 调用。然后,当我告诉 simple.py 打印出密钥时,结果["departments[two]", "departments[one]"]
不是我所期望的,["departments"]
. 然后,由于“部门”显然不是键,所以当我尝试时我得到一个 KeyError print json.dumps(fs["departments"].value)
,而print json.dumps(fs["departments[one]"].value)
给我的结果是 1。
根据FieldStorage 的文档,“通过 form[key] 访问的字段本身就是 FieldStorage 的实例”,所以我认为我的 FieldStorage 对象将有一个“部门”键,其值是另一个包含键“one”的 FieldStorage 对象”和“二”。然而,这似乎不是真的。如何形成多级 Javascript 对象并使用 FieldStorage 在我的 python 脚本中访问它?