我想将一些(目前是 JSON)数据发送到 Python 脚本并访问结果。在尝试自己做这件事但失败后,我遇到了 two examples这里就这样。我都无法完成这两项工作。
pythonAjaxTest.html
:
...
<script>
$(function(){
$('#ajaxButton').click(function(){
alert("Ajaxing...");
$.ajax({
url: "ajaxTest.py", //equivalently, replace with "saveList.py"
type: "POST",
dataType: "json",
data: JSON.stringify({
"param" : { "hello" : "world" }
}),
success: function(response) {
alert(response.responseText);
}, error: function(response) {
alert(response.responseText);
}
});
});
});
</script>
...
ajaxTest.py
:
#!/usr/bin/env python
import sys
import json
import cgi
fs = cgi.FieldStorage()
sys.stdout.write("Content-Type: application/json")
sys.stdout.write("\n")
sys.stdout.write("\n")
result = {}
result['success'] = True
result['message'] = "The command Completed Successfully"
result['keys'] = ",".join(fs.keys())
d = {}
for k in fs.keys():
d[k] = fs.getvalue(k)
result['data'] = d
sys.stdout.write(json.dumps(result,indent=1))
sys.stdout.write("\n")
sys.stdout.close()
saveList.py
:
#!/usr/bin/python
import sys, json
result = {'success':'true','message':'The Command Completed Successfully'};
myjson = json.load(sys.stdin)
# Do something with 'myjson' object
print 'Content-Type: application/json\n\n'
print json.dumps(result) # or "json.dump(result, sys.stdout)"
使用这两个方法,我在控制台中收到 400
错误并遵循 responseText
:
<?xml version=‘1.0’ encoding ‘UTF-8’?><Error><Code>InvalidArgument</Code><Message>Invalid argument.</Message><Details>POST object expects Content-Type multipart/form-data</Details></Error>
鉴于我使用的代码与这两个问题的每个已接受答案基本上完全相同,我不确定我做错了什么。这只是 Google Cloud 的问题吗?我的所有源文件都放在一个存储桶中。 (1,2。)
<小时/>
我使用 n1-standard-1(1 个 vCPU,3.75 GB 内存)
虚拟机运行这些脚本。
期望的行为:我想向这些 Python 文件发出成功的 Ajax 请求并返回结果(某些结果)。我正在寻找我所链接的两个问题的回答者所描述的行为。
具体问题或错误: Ajax 失败。错误为 400
,文本位于上方。
必要的最短代码:我包含的代码可能有点长,但我包含它是因为我想准确包含其他接受的答案中的内容。 (问题陈述:)如何向在其他环境下可在 Google Cloud 上运行的 Python 文件发出 Ajax 请求?
<小时/>目前正在研究 Martijn 的答案...
最佳答案
看起来你的 javascript 代码没问题,但我认为你可以稍微修改一下 Python 代码 - 你正在使用 stdin/out,我还没有看到它有很好的结果。我建议您使用像 Tornado 这样的库,甚至是包含 python 的 simpleHttpServer。
Tornado 的主页上有一个示例: http://www.tornadoweb.org/en/stable/
更简单的是 simpleHttpServer,这是一个工作示例: Reading JSON from SimpleHTTPServer Post data
此外,我建议您先尝试在家庭计算机上本地运行这些示例,然后再在 Google Cloud 上运行。这很可能是代码问题,而不是 GCP 问题。
祝你好运!
关于javascript - Google Cloud 上的 Ajax 到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336578/