问题描述:在Flask应用程序中使用AJAX和JSON发送POST请求时,无法正常处理请求,因为HTML表单发送的POST请求与AJAX发送的JSON数据的POST请求具有不同的内容类型和数据格式。
解决:
在Flask中,可以使用request.json或request.get_json()方法来获取JSON数据,而不是使用request.form或request.data获取表单或二进制数据。
示例代码:
HTML表单:
AJAX请求:
$.ajax({
url: "/submit-form",
type: "POST",
data: JSON.stringify({ "name": "John", "email": "john@example.com" }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
console.log(data);
},
error: function(xhr, status, error) {
console.error(error);
}
});
Flask视图函数:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/submit-form', methods=['POST'])
def submit_form():
if request.is_json:
data = request.get_json()
else:
data = request.form.to_dict()
# do something with data
result = {'status': 'success'}
return jsonify(result)
通过这种方式,Flask应用程序可以处理来自所有客户端的POST请求,无论是HTML表单还是AJAX发送的JSON数据。