yay*_*ayu 49 python ajax jquery flask
在服务器端,我只是将json-as-dictionary打印到控制台
@app.route('/',methods=['GET','POST'])
@login_required
def index():
if request.method == "POST":
print request.json.keys()
return "hello world"
Run Code Online (Sandbox Code Playgroud)
现在,每当我通过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!!")
}});
Run Code Online (Sandbox Code Playgroud)
小智 58
关于回应
视图函数的返回值会自动转换为响应对象.如果返回值是一个字符串,则将其转换为响应对象,其中字符串为响应主体,
200 OK状态代码和text/htmlmimetype.Flask应用于将返回值转换为响应对象的逻辑如下:
- 如果返回了正确类型的响应对象,则直接从视图返回.
- 如果是字符串,则使用该数据和默认参数创建响应对象.
- 如果返回元组,则元组中的项可以提供额外信息.这样的元组必须是这样的形式,
(response, status, headers)或者(response, headers)至少有一个项必须在元组中.该status值将覆盖状态代码,headers可以是其他标头值的列表或字典.- 如果这些都不起作用,Flask将假定返回值是一个有效的WSGI应用程序并将其转换为响应对象.
因此,如果您返回文本字符串(正如您所做的那样),您的AJAX调用必须接收的状态代码是200 OK,并且您的成功回调必须正在执行.但是,我建议您返回JSON格式的响应,如:
return json.dumps({'success':True}), 200, {'ContentType':'application/json'}
Run Code Online (Sandbox Code Playgroud)
Phi*_*röm 18
作为aabilio答案的一个选项,您可以在Flask中使用jsonify方法自动设置Content-Type:
from flask import jsonify
resp = jsonify(success=True)
return resp
Run Code Online (Sandbox Code Playgroud)
您可以(可选)显式设置响应代码:
resp.status_code = 200
Run Code Online (Sandbox Code Playgroud)
除了已经发布的答案之外,我发现使用make_responseFlask 中的方法(从 0.6 版开始)是一个更清晰的选择,尤其是当您需要使用 Flask 的 API 响应 JSON 返回状态代码时:
from flask import jsonify, make_response
# ... other code ...
data = {'message': 'Created', 'code': 'SUCCESS'}
return make_response(jsonify(data), 201)
Run Code Online (Sandbox Code Playgroud)
此外,此方法允许您传递响应代码 (201) 并将自动将Content-Type标头设置为application/json.
在较新版本的 Flask 中,它现在将为您处理响应中的转换。您的响应可以简化为返回字典和响应代码,如下所示:
@app.route("/my_route")
def my_route():
data = {"status": "success", "some key", "some value"}
return data, 200
Run Code Online (Sandbox Code Playgroud)
data也不一定需要是字典,您也可以传入字符串!
| 归档时间: |
|
| 查看次数: |
43050 次 |
| 最近记录: |