首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回ajax调用的成功状态代码。

如何返回ajax调用的成功状态代码。
EN

Stack Overflow用户
提问于 2014-09-27 22:23:56
回答 6查看 116.6K关注 0票数 74

在服务器端,我只是将json作为字典打印到控制台。

代码语言:javascript
复制
@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状态发回给我的客户,告诉它一切都好?

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

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

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-09-28 01:29:04

瓶中的关于反应

关于反应 视图函数的返回值将自动转换为响应对象。如果返回值是字符串,则将其转换为响应对象,其中字符串为响应体、200 OK状态代码和text/html mimetype。Flask应用于将返回值转换为响应对象的逻辑如下:

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

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

代码语言:javascript
复制
return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 
票数 90
EN

Stack Overflow用户

发布于 2018-08-20 14:00:35

作为阿比里奥的回答的一个选项,您可以在Flask中使用jsonify方法,它自动设置内容类型:

代码语言:javascript
复制
from flask import jsonify

resp = jsonify(success=True)
return resp

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

代码语言:javascript
复制
resp.status_code = 200
票数 58
EN

Stack Overflow用户

发布于 2019-04-29 11:01:42

除了已经发布的答案之外,我发现使用make_response方法(版本0.6)可以更清晰地选择,特别是当您需要返回状态代码时,您需要返回来自Flask的API响应JSON:

代码语言:javascript
复制
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

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26079754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档