jQuery autocomplete with python Flask

jQuery autocomplete with python Flask

本文关键字:Flask python with autocomplete jQuery      更新时间:2023-09-26

之前问过许多与我类似的问题,我尝试了所有解决方案,但发现它没有帮助。

我有一个文本框,需要将自动完成与根据给定的输入从数据库获取的值合并。我在客户端使用javascript,在服务器端使用python。我正在为此活动使用烧瓶框架。

.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 活动,则自动完成功能正常。

任何帮助,不胜感激。提前谢谢。

通常,ajax 调用中的 500 错误代码意味着服务器大小的代码本身存在一些问题。我要检查的一件事是,如果没有返回任何行,您将在data_list.append(row[0])中收到错误,因为行不是列表(可能是 None),并且 row[0] 会失败。

使用 try/except 捕获错误并在客户端处理它(如果返回 None ,javascript 应该什么都不做 - 自动完成应该能够处理来自 ajax 调用的空值,所以你主要需要确保你的服务器端 python 适用于所有输入)。

旁注:不要在每次用户更改输入时都连接/断开与数据库的连接。这是很大的开销。使用 Flask-SQLAlchemy 进行数据库连接管理。它比你上面做的更优雅、更快、对资源的要求更低。