当使用javascript

时间:2015-11-26 03:09:45

标签: javascript python xmlhttprequest

我正在使用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脚本一样?这会解决这个问题吗?

1 个答案:

答案 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,它按预期工作......这是一种解脱......