在服务器端,我只是将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用于将返回值转换为响应对象的逻辑如下: 如果返回正确类型的响应对象,则直接从视图中返回它。 如果是字符串,则使用该数据和默认参数创建一个响应对象。 如果返回一个元组,则该元组中的项目可以提供额外的信息。这样的元组必须是形式,(response, status, headers)或者(response, headers)其中至少一项必须在元组中。该status值将覆盖状态代码,并且headers可以是其他标头值的列表或字典。 如果这些都不起作用,则Flask将假定返回值是有效的WSGI应用程序,并将其转换为响应对象。
视图函数的返回值将自动转换为您的响应对象。如果返回值为字符串,则将其转换为响应对象,并将该字符串作为响应主体,200 OK状态码和text/htmlmimetype。Flask用于将返回值转换为响应对象的逻辑如下:
200 OK
text/html
(response, status, headers)
(response, headers)
status
headers
因此,如果您返回文本字符串(如您所做的那样),则AJAX调用必须接收的状态代码为200 OK,并且成功回调必须正在执行。但是,我建议您返回JSON格式的响应,例如:
return json.dumps({'success':True}), 200, {'ContentType':'application/json'}