我正在使用javascript将数据{"hello":"world"};
发送到python cgi脚本,如下所示(此脚本有效)
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<head>I am a header</head>
<body>
<script type="text/javascript">
var httprequest=new XMLHttpRequest();
httprequest.open("POST","hello.cgi");
var content={"hello":"world"};
httprequest.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
httprequest.send(JSON.stringify(content));
httprequest.onload=function(){
if(httprequest.status==200){
alert("");
document.write(httprequest.responseText)};
}//end of onload
</script>
</body>
<script>
</script>
</html>
</doctype>
这是我的python cgi脚本
#!/usr/bin/python
try:
import sys,os
import cgi
sys.stderr=sys.stdout
import traceback
print("Content-type: text/html\n\n")
print "<h1>YES</h1>"
formData = cgi.FieldStorage()
print((formData))
except Exception as e:
#print(e.message)
print(traceback.print_exc())
这个cgi脚本需要将javascript对象转换为字符串,删除html文档中的所有内容并将以下内容写入浏览器
YES
FieldStorage(None, None, '{"hello":"world"}')
问题1
我不希望此cgi脚本在fieldstorage中将'{"hello":"world"}'
写为字符串我希望它将字符串写为字典{{1} } / object
或者javascript中是否有一种方法可以将javascript字符串编码为GET或post格式并发送输出,就好像它将数据的html {"hello":"world"}
提交到python cgi脚本一样?这会解决这个问题吗?
答案 0 :(得分:0)
cgi.fieldstorage似乎主要用于从HTML表单标签接收数据。因此,它不是json字符串的正确工具
以下是我在一些深夜心理破坏后解决这个问题的方法。我在python中使用json模块
#!/usr/bin/python
try:
import sys,os,json
import cgi
sys.stderr=sys.stdout
import traceback
print("Content-type: text/html\n\n")
print "<h1>YES</h1>"
data=json.load(sys.stdin) #convert json string to python object (answer)
print "<script>var t="+str(json.dumps(data))+"</script>" # I can also take the string and put it in a html script
#print((formData))
except Exception as e:
print(e.message)
print(traceback.print_exc())
之后我尝试在浏览器中调用我的javascript对象t
,它按预期工作......这是一种解脱......