使用python Flask进行jQuery自动完成

时间:2014-12-10 05:02:54

标签: javascript jquery python autocomplete flask

之前我曾提出许多类似的问题,我尝试了所有的解决方案,却发现它没有帮助。

我有一个文本框,其中自动完成需要与根据给定输入从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活动,则自动完成工作正常。

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

附注:每次用户更改输入时,都不要连接/断开数据库。这是一个很大的开销。使用Flask-SQLAlchemy进行数据库连接管理。它比您上面所做的更优雅,更快速,资源要求更低。