当我尝试从 jquery 将数据传递到 Flask 端点时没有响应

Posted

技术标签:

【中文标题】当我尝试从 jquery 将数据传递到 Flask 端点时没有响应【英文标题】:No response when I tried to pass data to Flask endpoint from jquery 【发布时间】:2019-04-25 01:23:39 【问题描述】:

我有一个用户在输入字段中输入数据的网页。我正在尝试将输入的数据传递给 python 脚本,对其进行处理并返回响应。我正在运行一个XAMPP服务器并根据this的答案修改了httpd.conf文件。

前端:

<script>
            let reviewtext;
            $("#reviewbox").change(function () 
                reviewtext = $('#reviewbox').val();
            );

            $("#submit").click(function (event) 
                let message = 
                    review: reviewtext
                

                $.ajax(
                    type: "POST",
                    url: "http://127.0.0.1:80/first.py",
                    data: JSON.stringify(message),
                    success: function (response) 
                        alert("Success");
                    ,
                    error: function (data) 
                        alert("Fail");
                    ,
                );
            );
</script>

Python:

#!C:/Users/xitis/AppData/Local/Programs/Python/Python37-32/python.exe

print("Content-Type: text/html\n")

from flask import request
from flask import jsonify
from flask import Flask

app = Flask(__name__)

@app.route('/first.py', methods=['POST'])

def predict():
    response = 
        'status' : "Success"
    
    return jsonify(response)

当我运行网页时,我没有得到任何响应。发布请求未执行。 甚至有可能做到这一点吗? 我是否必须使用 Flask 重新创建整个网站才能正常工作?

【问题讨论】:

只需访问request.data 属性。 查看here 以避免您的问题被标记为不相关 【参考方案1】:

在尝试this example之前,您应该知道一些事情。

首先,下面的端点是无效的,因为您没有公开一个可访问的 python 文件,而是一个 HTTP 端点。

 url: "http://127.0.0.1:80/first.py",

您应该公开一个预测资源,并使用 HTTP 动词来更改其状态:

# Do prediction analysis
@app.route('/predict', methods=['POST'])
def predict():
    result = store_predict_data(request.data)
    response = 
        'id': result.id,
        'status' : result
    
    return jsonify(response)
# get predict analysis result 
@app.route('/predict/id', methods=['GET'])
def post_predictable_data():
    ...

如上所示,Flask 使用werkzeug 包,在这个包中,有一个request object,它有一个data 属性,可以让你获取你从javascript 发送的payload。

当您使用 Web 应用程序框架时,您最终将拥有一个通过 HTTP 进行通信的应用程序,并且作为所有网络通信您应该设置端口,在 Flask 上默认为 5000,您可以change it to 80 ,但请确保您是唯一使用它的人。

您可以运行您的烧瓶服务器,仅用于开发目的:

FLASK_APP=flask_webserver.py flask run --port 8080
 * Serving Flask app "flask_webserver.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)

那么,当你curl它时,你会得到一个结果:

curl -d 'forking' -X POST localhost:8080                                                                                 
Hello, forking World! 

这是重现上述示例的代码

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/', methods=['POST','GET'])
def hello_world():
    return 'Hello, %s World!' % request.data.decode('UTF-8')

关于 XAMPP 的更新

由于您是从 XAMPP 运行的,请尝试将以下行放在文件末尾。

if __name__ == '__main__':
   app.run()

查看here了解详情

【讨论】:

我完成了您链接的博客中显示的所有步骤。那不符合我的要求。完成这些步骤后,我能够从 apache 服务器运行 python 脚本。如何修改这些步骤,以便我可以从服务器打开一个 HTML 页面并向/从 python 脚本传递和接收数据? 你只是想从 Windows 托管一个 python 网络服务器吗?

以上是关于当我尝试从 jquery 将数据传递到 Flask 端点时没有响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 将 JSON 数据传递到 Flask 服务器? [复制]

使用jquery将数据从视图传递到控制器

如何将 Json 数据从 javaScript 发送到 Flask

将数组从 jQuery 传递到 MVC.NET 控制器,在控制器上给出空结果,但在 jQuery 函数上存在值

如何在模板中将数据从 Flask 传递到 JavaScript?

将信息从一条路线传递到另一条路线:Flask ignoring redirect requests