我正在嘗試從 JS 腳本向 pythonanywhere 上的 Flask 服務器發出 POST 請求,如下所示:
const response = await fetch('http://myusername.pythonanywhere.com/', {
method: 'POST',
mode: 'no-cors',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
track: track
})
});
其中 track 是一個 nx10 的數字陣列。我已成功通過 Insomnia 向服務器發出請求,其正文如下所示:
{
"track": [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10.234], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
}
并將請求的正文內容列印到日志中,如下所示:
2021-11-16 15:57:14 Test message!
2021-11-16 15:57:14 <Request 'http://myusername.pythonanywhere.com/' [POST]>
2021-11-16 15:57:14 {'track': [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10.234], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]}
但是,當我嘗試使用第一段代碼從我的 Web 應用程式發出請求時,我在日志中得到了這個:
2021-11-16 15:54:21 Test message!
2021-11-16 15:54:21 <Request 'http://myusername.pythonanywhere.com/' [POST]>
2021-11-16 15:54:21 None
服務器代碼:
@app.route('/', methods=['POST'])
def handle_post():
req_data = request.get_json()
print("Test message!")
print(request)
print(req_data)
data = req_data['track']
trackData = np.array(data)
grade = analysisV2(trackData)
return jsonify({"grade": grade})
我不知道為什么一個請求有效,而另一個無效。我還嘗試將我在 Insomnia 中使用的相同資料硬編碼到 JS 請求正文中,沒有任何區別。有沒有人看到我可能遺漏的東西?
uj5u.com熱心網友回復:
我設法弄清楚發生了什么,以防萬一有人想知道并且碰巧正在做類似的事情。
這里有幾個問題:
- 添加
mode: 'no-cors'到請求會阻止服務器回應任何實際資料,因此必須將其洗掉。 - 在這種情況下,來自 Flask 的 get_json() 方法無論出于何種原因都不起作用,所以我只使用了 json.loads(request.get_data()) 方法。在回應中,還使用了 json.dumps() 方法而不是 .jsonify()。
- 客戶端必須發送帶有
'Access-Control-Allow-Origin': '*'標頭的請求。 - 服務器還需要啟用 CORS
from flask_cors import CORS和CORS(app)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/362275.html
標籤:javascript 休息 烧瓶 邮政 蟒蛇无处不在
