小编典典

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

python

在服务器端,我只是将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调用成功。

那么,如何将“正常”状态发送回给客户以告知一切正常?

为了完整起见,这是我的客户端代码

$.ajax({
    type: 'POST',
    contentType: 'application/json',
    data: JSON.stringify(myData),
    dataType: 'json',
    url: '/',
    success: function () {
        console.log("This is never getting printed!!")
    }});

阅读 156

收藏
2020-12-20

共1个答案

小编典典

关于烧瓶中的响应

关于回应

视图函数的返回值将自动转换为您的响应对象。如果返回值为字符串,则将其转换为响应对象,并将该字符串作为响应主体,200 OK状态码和text/htmlmimetype。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'}
2020-12-20