【发布时间】:2021-12-14 18:45:34
【问题描述】:
我正在对烧瓶函数进行 ajax 调用,以使用以下令牌获取数据
@app.route("/questgen/results", methods = ['POST', 'GET'])
def fetch_results():
token = request.form.get('token')
print(token)
conn = sqlite3.connect("database.db" , timeout=20)
cur= conn.cursor()
select_query = '''SELECT processed, output_text
FROM results
WHERE token = token
'''
cur.execute(select_query)
records = cur.fetchall()
processed = ""
html = ""
for row in records:
processed = row[0]
html = row[1]
conn.close()
data = {'processed': processed, 'html' : html}
return redirect(url_for('questgen', data = data))
ajax调用如下
$.ajax({
type: "POST",
url: "/questgen/results",
data: { token: token },
datatype: "json",
success: function (data) {
if (data.processed == 1) {
$('#divresults').html(data.html);
$('#divresults').show();
hideMyModal();
clearInterval(saveInterval);
}
}
});
完整的有点长,可以在这个gist找到问题是它返回
TypeError:视图函数未返回有效响应。这 函数要么返回 None,要么在没有 return 语句的情况下结束。
即使我通过在同一个数据库上使用return data 尝试了与 python 函数相同的烧瓶函数并且它可以工作。我什至尝试将token 作为函数参数,但它仍然无法正常工作。有人可以帮助我在这里做错什么吗?谢谢
【问题讨论】:
-
你能解释一下你为什么这样做`data_str = json.dumps(data_dict) data = json.loads(data_str)`
-
render_template('questgen.html', data = data)为我工作。你能详细说明你的答案吗?因为我的应用程序中有其他函数使用redirect并返回数据 -
我需要两个变量的 json 对象
-
你有一个 dict
data_dict你把它转成 str 再转回 dict - 不是吗? -
我删除了我的第一条评论,因为我走错了路。您的
render_template解决方案是处理此问题的正确方法。 @balderman 是对的:data与data_dict完全相同。转换为 JSON 并返回是没有意义的。