我有一个JS点击函数,想把一些数据发送到python文件中进行处理。
在JS文件中:
$(#button).click(function(){
// did some data collection
$.ajax{
type: "POST",
url: "/dummy",
data: {num: 123},
success: function(result){
alert(result);
}
error: function(xhr, status, error){
alert(xhr.status)
}
}
})
并且在导入后的python文件中:
app = Flask(__name__)
@app.route('/dummy', methods=['GET', 'POST'])
def dummy(){
return 1
}
if __name__ == '__main__':
app.run(debug=True)
单击按钮时,我一直收到警报0。
为什么ajax请求没有通过并且状态为0?
尝试将Python文件中的0
转换为字符串。Flask通常不允许您返回整数。
app = Flask(__name__)
@app.route('/dummy', methods=['GET', 'POST'])
def dummy(){
return "1"
}
if __name__ == '__main__':
app.run(debug=True)
如果需要,可以使用parseInt()
函数在JavaScript中将字符串转换为整数。
$(#button).click(function(){
// did some data collection
$.ajax{
type: "POST",
url: "/dummy",
data: {num: 123},
success: function(result){
result = parseInt(result);
alert(result);
}
error: function(xhr, status, error){
alert(xhr.status)
}
}
})
对于要向其发送数据的特定函数,您必须使用您在python文件中提到的路由,而不是文件名。
在您的情况下,它应该是:
url: "/dummy",
应该是路线中的方法,而不是方法
app.route("/dummy",methods=["GET","POST"])
编辑:返回字符串而不是整数,因为烧瓶中不支持返回整数。
def dummy(){
return "1"
}
问题似乎实际上与CORS有关。CORS通过阻止不同来源的请求来阻止网站从其他网站窃取内容。由于您的HTML文件是用file://
URL加载到web浏览器中的,CORS正在阻止请求,因此有两种方法可以解决此问题。
选项1:使用Flask Cors
更新python代码以允许跨源请求。
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
corsApp = CORS(app, send_wildcard=True)
@app.route('/dummy', methods=['GET', 'POST'])
@cross_origin()
def dummy():
return "1"
if __name__ == '__main__':
app.run(debug=True)
选项2:在本地web服务器上托管HTML文件
您也可以在本地web服务器上托管HTML文件,然后使用该URL访问它
from flask import Flask, render_template
app = Flask(__name__, template_folder="PATH_TO_HTML_FILE")
@app.route("/")
def home():
return render_template("NAME_OF_HTML_FILE.html")
@app.route('/dummy', methods=['GET', 'POST'])
def dummy():
return "1"
if __name__ == '__main__':
app.run(host="0.0.0.0", port="5000", debug=True)
然后你可以用0.0.0.0:5000/
访问它(可能会根据运行的主机/端口烧瓶而变化(
此外,Flask不能返回整数,只能返回字符串。