当前位置: 首页 > 面试题库 >

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

崔高远
2023-03-14
问题内容

在服务器端,我只是将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!!")
    }});

问题答案:

关于flask中的响应:

视图函数的返回值将自动转换为您的响应对象。如果返回值为字符串,则将其转换为响应对象,并将该字符串作为响应主体,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'}


 类似资料:
  • 问题内容: 我们正在使用Flask作为我们的API之一,我只是想知道是否有人知道如何返回HTTP响应201? 对于诸如404之类的错误,我们可以致电: 但是对于201我得到 LookupError:201都不例外 我是否需要创建自己的例外,像这样的文档? 问题答案: 你可以在这里阅读。

  • 在我的烧瓶应用程序中,我想将响应存储在MongoDB中。我想更改状态代码和响应数据,以防存储任务无法完成。如何更改响应对象的状态代码 这是用于Python3.6中开发的Flask应用程序 现在如果有异常,我收到状态代码200

  • 问题内容: 这真让我感到困惑。我收到来自Ajax的错误回调。但是,如果我从错误消息中获取res.responseText(返回正确,顺便说一句)并使用它,则它做对了。就像我收到了成功的回调一样。 数据设置如下: 和ajax调用是这样的: 错误消息是:发生错误:。 问题答案: 如果您的responseText不是正确的JSON,则会引发解析错误。无论是 确保你的反应是一个有效的JSON 或 删除。

  • 问题内容: function ChatServerQuery(data_json) { 我执行对服务器的请求的功能。问题是我无法返回从服务器收到的文本。我不知道如何从匿名函数(事件成功)转移到ChatServerQuery(可以在其中轻松将其取回)。 问题答案: 您最好更改您的方法以反映AJAX请求的异步性质。 使用回调函数 然后,您将使用它: 使用承诺对象 返回实现Promise iterfac

  • 问题内容: 我有这样的事情,它是对脚本的简单调用,该脚本给了我一个值,一个字符串。 但是如果我这样称呼 那么我该如何返回值?下面的代码似乎也不起作用… 问题答案: 从该函数返回数据的唯一方法是进行同步调用而不是异步调用,但这将使浏览器在等待响应时冻结。 您可以传入一个处理结果的回调函数: 这样称呼它:

  • 嗨,我是Laravel的新手,我正在尝试用ajax表单提交构建一个登录表单。 我抄了 如果我从VerifyCsrfToken检查中排除它,我的代码工作完全正常。但是我确实希望令牌验证有效。 我读过多篇关于csrf令牌的帖子,尝试过,但仍然返回状态码419。 抱歉下面的长代码,但他们在这里(我知道我没有做任何关于设置会话和东西,请忽略现在因为代码返回419状态) 路线/web.php login.j