最近做项目碰到一个坑,jquery使用ajax向flask传输数据的时候,在后端采用request.data无论如何都获取不到数据,代码如下:
前端:
<script>
function checkUser() {
var usercookie = $.cookie("validate");
$.ajax({
url: "http://127.0.0.1:5000/checkCookie",
type: "POST",
data: {'cookie': '123123'},
success: function(data){
console.log(data);
},
error: function(err) {
console.log("验证失败");
}
});
}
</script>
contentType无论设置成 application/json; charset=UTF-8',还是json,在下列后端测试代码中都无法获取数据:
@app.route('/checkCookie', methods=['POST'])
def checkCookie():
data = request.data
if data :
return "success", 200
else:
return "error", 400
但如果将request.data 改为 request.get_data(), 则会直接获取到GET参数的字节:b'cookie=123123', 当传入的参数有多个的时候,就会变成a=123&b=234这样的形式,这肯定不是我们想要的,处理起来会很麻烦。所以搞半天最后改成以下的形式,可以直接获取到json的形式,这样后端处理就方便很多了:
前端:
<script>
function checkUser() {
var usercookie = $.cookie("validate");
Udata = JSON.stringify({"Uid": usercookie});
$.ajax({
url: "http://127.0.0.1:5000/checkCookie",
type: "POST",
contentType: 'application/json; charset=UTF-8',
data: Udata,
success: function(data){
console.log(data);
},
error: function(err) {
console.log("验证失败");
}
});
}
</script>
后端:
@app.route('/checkCookie', methods=['POST'])
def checkCookie():
data = request.get_json()
if data:
return "success", 200
else:
return "error", 400
这样更改以后,后端能直接获得前端发送的json数据,并且通过get_json()方法能直接得到json格式的数据。