在服务器端,我只是将json作为字典打印到控制台。
@app.route('/',methods=['GET','POST'])
@login_required
def index():
if request.method == "POST":
print request.json.keys()
return "hello world"现在,每当我通过ajax发出post请求时,控制台就会打印出包含所需内容的字典。
在客户端,我一直试图使用各种方法基于一个成功的ajax调用来执行一些jquery。我刚刚意识到,这可能是服务器端的一个错误,也就是说,我不会发送任何请求头来告诉jquery它的ajax调用是成功的。
那么,我如何将OK状态发回给我的客户,告诉它一切都好?
为了完整起见,下面是我的客户端代码
$.ajax({
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(myData),
dataType: 'json',
url: '/',
success: function () {
console.log("This is never getting printed!!")
}});发布于 2014-09-28 01:29:04
瓶中的关于反应:
关于反应 视图函数的返回值将自动转换为响应对象。如果返回值是字符串,则将其转换为响应对象,其中字符串为响应体、
200 OK状态代码和text/htmlmimetype。Flask应用于将返回值转换为响应对象的逻辑如下:
(response, status, headers)或(response, headers)的形式出现,其中至少必须有一个项在元组中。status值将覆盖状态代码,headers可以是附加标头值的列表或字典。因此,如果您返回文本字符串(正如您正在做的那样),则AJAX调用必须接收的状态代码是200 OK,您的成功回调必须执行。但是,我建议您返回JSON格式的响应,如下所示:
return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 发布于 2018-08-20 14:00:35
作为阿比里奥的回答的一个选项,您可以在Flask中使用jsonify方法,它自动设置内容类型:
from flask import jsonify
resp = jsonify(success=True)
return resp您可以(可选)显式设置响应代码:
resp.status_code = 200发布于 2019-04-29 11:01:42
除了已经发布的答案之外,我发现使用make_response方法(版本0.6)可以更清晰地选择,特别是当您需要返回状态代码时,您需要返回来自Flask的API响应JSON:
from flask import Flask, jsonify, make_response
app = Flask(__name__)
@app.route('/do_thing')
def do_thing():
# ... other code ...
data = {'message': 'Done', 'code': 'SUCCESS'}
return make_response(jsonify(data), 201)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)此外,这种方法允许您传递响应代码(201),并自动将Content-Type头设置为application/json。
https://stackoverflow.com/questions/26079754
复制相似问题