Flask,如何返回ajax调用的成功状态码

新手上路,请多包涵

在服务器端,我只是将 json-as-dictionary 打印到控制台

@app.route('/',methods=['GET','POST'])
@login_required
def index():
    if request.method == "POST":
        print request.json.keys()
    return "hello world"

现在,每当我通过 ajax 发出发布请求时,控制台都会打印出包含我需要的内容的字典。

在客户端,我一直在尝试使用各种方法基于成功的 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!!")
    }});

原文由 yayu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 587
2 个回答

关于 Flask 中的响应

关于回应

视图函数的返回值会自动转换为响应对象。如果返回值是一个字符串,它被转换成一个响应对象,该字符串作为响应主体,一个 200 OK 状态代码和一个 text/html mimetype。 Flask将返回值转化为响应对象的逻辑如下:

  1. 如果返回了正确类型的响应对象,它会直接从视图中返回。
  2. 如果它是一个字符串,则使用该数据和默认参数创建一个响应对象。
  3. 如果返回元组,则元组中的项目可以提供额外信息。这样的元组必须采用 (response, status, headers)(response, headers) 的形式,其中元组中必须至少有一项。 status 值将覆盖状态代码, headers 可以是附加标头值的列表或字典。
  4. 如果这些都不起作用,Flask 将假定返回值是有效的 WSGI 应用程序并将其转换为响应对象。

因此,如果您返回文本字符串(正如您所做的那样),您的 AJAX 调用必须接收的状态代码是 200 OK ,并且您的成功回调必须正在执行。但是,我建议您返回 JSON 格式的响应,例如:

 return json.dumps({'success':True}), 200, {'ContentType':'application/json'}

原文由 aabilio 发布,翻译遵循 CC BY-SA 4.0 许可协议

作为 aabilio 答案 的一个选项,您可以使用 Flask 中的 jsonify 方法自动设置内容类型:

 from flask import jsonify

resp = jsonify(success=True)
return resp

您可以(可选)显式设置响应代码:

 resp.status_code = 200

原文由 Philip Bergström 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题