最近做項目碰到一個坑,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格式的數據。