javascript - 当我尝试从 jquery 将数据传递到 Flask 端点时没有响应
问题描述
我有一个网页,用户在输入字段中输入数据。我正在尝试将输入的数据传递给 python 脚本,对其进行处理并返回响应。我正在运行 XAMPP 服务器并根据此答案修改了 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 重新创建整个网站才能正常工作?
解决方案
在尝试此示例之前,您应该了解一些事情。
首先,下面的端点是无效的,因为您不是将 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 对象,它有一个data属性,允许你获取你从 javascript 发送的 payload。
当您使用 Web 应用程序框架时,您最终将拥有一个通过 HTTP 进行通信的应用程序,并且作为所有网络通信,您应该设置端口,在 Flask 上默认为 5000 ,您可以将其更改为 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()
看看这里了解详情
推荐阅读
- html - 如何将此 flexbox 联系表单转换为 CSS 网格?
- shell - uDeploy,在switch中引用shell变量
- pytorch - Pytorch 数据集中无法打开共享文件映射错误
- html - 带引导程序的离线 PWA 视图
- keycloak - Keycloak 自定义用户存储提供程序(分配的角色集/有效角色为空)
- github - egit.core:如何以编程方式修改文件
- html - 如何在不更改当前 URL 的情况下发出 html 请求?
- arrays - 使用顶级数据在 Swift 中解码对结构数组的 JSON 响应
- python - 如何按顺序获取数字的起点并处理错误情况?
- git - 将最新提交的更改添加到过去的提交