请教一下 flask 中ajax 获取数据传递到后台,后台怎么接受数据,不知道哪里的问题,数据一直获取不了.
通过ajax 获取data中city数据代码
后台接收代码
运行的效果
ajax请求的网址另外用一个路由,共用区分下请求类型是get或者post,get返回模板,否则返回post请求的值,示例如下
from flask import Flask, request,render_template
import json
app = Flask(__name__)
@app.route("/change_data", methods=['GET','POST'])
def change_data():
if request.method=='GET':##直接访问为get请求,返回模板
return render_template("change_data.html")
##ajax post请求
city = request.get_json().get('city')
city_name = json.dumps({"city":city})
return city_name
app.run('0.0.0.0', port=8001,debug=True)
模板 templates\change_data.html
<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
<script>
var data = { "city": "重庆" };
$.ajax({
url: '/change_data',
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
dataType: 'json',
success: function (data) {
alert(data.city);
},
error: function () {
alert('服务器超时,请重试!');
}
});
</script>
参考GPT和自己的思路:修改后的代码如下:
前端代码:
var data = {"city":"重庆"};
$.ajax({
url: '/change_data',
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
dataType: 'json',
success: function(data){
alert(data.city);
},
error: function(){
alert('服务器超时,请重试!');
}
});
后端代码:
@app.route("/change_data", methods=['POST'])
def change_data():
city = request.get_json().get('city')
city_name = jsonify({"city":city})
return city_name
这样应该就能正确地获取到前端传递的数据并返回给前端了。注意,Flask中需要安装"flask-json"库,以支持JSON格式的数据传递和处理。
参考GPT的回答和自己 的思路,您在后端代码中获取数据的方式是通过request.form.get('city'),但是在ajax中使用的是data,因此需要将data中的数据放在form中传递。可以使用FormData对象来实现,代码如下:
var data = new FormData();
data.append("city", "重庆");
$.ajax({
url: '/change_data',
data: data,
type: 'POST',
dataType: 'json',
success: function(data) {
alert(data.city);
},
error: function() {
alert('服务起时,请重试!');
}
});
最后,在后端代码中,应该将获取到的数据转化为字典类型,然后使用jsonify返回,代码如下:
from flask import jsonify
@app.route("/change_data", methods=['GET', 'POST'])
def change_data():
city = request.form.get('city')
city_dict = {"city": city}
return jsonify(city_dict)
这样就可以成功获取并返回前端传递的数据了。
回答不易,还请采纳!!!
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在flask中接收ajax传递的数据可以通过request.get_json()进行获取,具体如下:
前端代码:
$.ajax({
type: "POST",
url: "/test",
data: JSON.stringify({'city': '北京'}),
contentType: "application/json;charset=utf-8",
success: function(result){
console.log(result);
},
error: function(result){
console.log(result);
}
});
后端代码:
@app.route('/test', methods=['POST'])
def test():
data = request.get_json()
city = data.get('city')
return city
其中,因为前端传递的是json格式的数据,需要设置contentType为"application/json;charset=utf-8",后端获取数据可以通过request.get_json()获取。注意在获取数据时需要先将请求数据转换为字典类型,可以使用get方法获取对应的数据。
另外,如果接收到的数据中有中文,需要对请求数据进行编码和解码,这可以通过urlencode和unquote方法进行实现,具体如下:
前端代码:
data: 'city=' + encodeURIComponent('北京'),
后端代码:
import urllib.parse
@app.route('/test', methods=['POST'])
def test():
data = urllib.parse.unquote(request.data.decode('utf-8'))
city = data.split('=')[1]
return city
注意在解析数据前需要使用unquote方法对数据进行解码,并且在获取数据时需要通过split方法进行分割。
如果我的回答解决了您的问题,请采纳!