【问题标题】:jQuery autocomplete with python Flask使用 python Flask 的 jQuery 自动完成
【发布时间】:2015-02-08 05:06:58
【问题描述】:

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

我有一个文本框,需要根据给定的输入将自动完成与从 db 获取的值合并。我在客户端使用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 Internal server error。

在自动完成 sn-p 中,如果 source: "{{url_for('autocomplete')}}".json_list 它也会抛出错误。

但如果值在 javascript 端作为数组给出并且不涉及 python 活动,则自动完成工作正常。

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

【问题讨论】:

  • 我认为您需要打开 DEBUG 模式并查看烧瓶日志/控制台以查看究竟是什么引发了 500 错误。

标签: javascript jquery python autocomplete flask


【解决方案1】:

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

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

附注:不要在每次用户更改输入时都连接/断开与数据库的连接。这是很多开销。使用 Flask-SQLAlchemy 进行数据库连接管理。与您在上面所做的相比,它更优雅、更快且资源需求更少。

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 2013-06-26
    • 2016-04-14
    • 2016-11-10
    • 2021-03-04
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多