javascript - Google Cloud 上的 Ajax 到 Python

标签 javascript python json ajax google-cloud-platform

我想将一些(目前是 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 的问题吗?我的所有源文件都放在一个存储桶中。 (12。)

<小时/>

我使用 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/

相关文章:

python - 是否有任何交叉引用 Python 源代码的 git web 网关

java - 在 Java 中使用公共(public)键合并两个列表

c# - 如何在使用 OneSignal 发送推送通知时发送一些额外的数据?

javascript - 在 Redis 中存储嵌套的 JavaScript 对象 - NodeJS

javascript - 与 window.history.back() 不一致

javascript - 我如何使用 JSLQ 获得最高记录?

javascript - 如何将计数器变量放入其函数范围内?

python - 为什么打印结果与功能不同

python - 获取最终预测蒙版中的轮廓坐标

javascript - Highcharts 生成中的损坏