我正在尝试学习如何使用Python的cgi mod。现在我正在测试一个应该返回JSON对象的Python脚本的基本AJAX请求。我在xampp的Apache服务器上运行它,我已经将我的python脚本的权限设置为对所有人开放。 我的目标是将一个JSON对象传递给Python,更改它,然后让Python返回该对象,以便我可以在Javascript中使用它。
这是我的python脚本。我目前将输入和输出JSON对象分开,因此我可以测试双方都有效(但都不起作用):
#!/usr/bin/env python
import sys
import json
import cgi
ip = cgi.FieldStorage()
#print to file to make sure input is getting passed
f = open("pyfile.txt", "w")
f.write("girl: " + str(ip.getvalue('girl')) + "\n")
f.write("boy: " + str(ip.getvalue('boy')) + "\n")
f.close()
#test ability to return JSON object to javascript
op = {"girl":"fille", "boy":"garcon"}
print 'Content-Type: application/json\n\n'
print (json.dumps(op))
我尝试了两种不同的AJAX方法来运行python脚本。这是第一个:
$.ajax({
method: "POST",
url: "script.py",
datatype:"json",
data: {'girl':'ragazza','boy':'ragazzo'},
success: function(response) {
alert("Success!");
console.log(JSON.stringify(response));
},
error: function(a,b,c) {
alert("Error");
}
});
提交此请求后,我获得了“成功!”警报和下面打印到我的控制台(基本上是什么打印是我的python脚本)。也永远不会创建pyfile.txt。
"#!/usr/bin/env python\r\nimport sys\r\nimport json\r\nimport cgi\r\nip =
cgi.FieldStorage()\r\n\r\n#print to file to make sure input is getting
passed\r\nf = open(\"pyfile.txt\", \"w\")\r\nf.write(\"girl: \" +
str(ip.getvalue('girl')) + \"\\n\")\r\nf.write(\"boy: \" +
str(ip.getvalue('boy')) + \"\\n\")\r\nf.close()\r\n\r\n#test ability to return
JSON object to javascript\r\nop = {\"girl\":\"fille\", \"boy\":\"garcon\"}
\r\nprint 'Content-Type: application/json\\n\\n'\r\nprint (json.dumps(op))"
所以我尝试了另一种方法,因为我无法弄清楚出了什么问题。这是我尝试的第二种AJAX方法:
$.getJSON('script.py', {'girl':'ragazza', 'boy':'ragazzo'})
.done(function(json) {
alert("Success!");
console.log(json['girl']);
})
.fail(function( jqxhr, textStatus, error ) {
alert("Error");
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});
结果是错误警报,下面是打印到我的控制台的内容。意外的令牌是我的python脚本中的第一个char(测试过)。
Request Failed: parsererror, SyntaxError: Unexpected token #
我不确定我做错了什么。我已经阅读了很多教程和stackoverflow问题,但我没有得到任何结论。我应该首先从我的命令提示符运行python脚本(我在Windows上工作)还是仅使用python服务器?