之前我曾提出许多类似的问题,我尝试了所有的解决方案,却发现它没有帮助。
我有一个文本框,其中自动完成需要与根据给定输入从db获取的值合并。我在客户端使用javascript并在服务器端使用python。我正在使用flask框架进行此活动。
HTML:
<input type="text" id="auto"/>
的javascript:
<script type = "text/javascript">
$(document).ready(function(){
$("#auto").autocomplete({
source: "{{url_for('autocomplete')}}",
minLength: 1
});
});
</script>
蟒:
@app.route('/autocomplete', methods=['GET'])
def autocomplete():
value = request.args.get('term')
sql = "select name from data_table where name like '%"+value+"%'"
conn = sqlite3.connect(DATABASE)
data_list = []
cursor = conn.execute(sql)
for row in cursor:
data_list.append(row[0])
conn.close()
return jsonify(json_list=data_list)
对于在文本框中输入的每个键,都会调用python方法。问题是我如何将结果返回给javascript。每次我输入密钥时,我都会收到500内部服务器错误。
在自动填充代码段中,如果source: "{{url_for('autocomplete')}}".json_list
它也会抛出错误。
但是如果在javascript端给出值作为数组并且没有涉及python活动,则自动完成工作正常。
感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
通常,ajax调用中的500错误代码意味着服务器大小的代码本身存在一些问题。我要检查的一件事是,如果没有返回任何行,你会在data_list.append(row[0])
中收到错误,因为row不是列表(可能是None),而row [0]会失败。
使用try / except捕获你的错误并在客户端处理它(如果返回None则javascript应该什么都不做 - 自动完成应该能够处理来自ajax调用的空值,所以你离开了主要是确保你的服务器端python适用于所有输入)。
附注:每次用户更改输入时,都不要连接/断开数据库。这是一个很大的开销。使用Flask-SQLAlchemy进行数据库连接管理。它比您上面所做的更优雅,更快速,资源要求更低。