JS Python与ajax和flask的交互状态为0



我有一个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不能返回整数,只能返回字符串。

相关内容

  • 没有找到相关文章

最新更新