【问题标题】:jQuery autocomplete function not workingjQuery自动完成功能不起作用
【发布时间】:2014-01-16 07:24:32
【问题描述】:

我在我的项目中使用 django。这是我为获取查询建议而创建的视图:

def query_suggestions(request):
 if request.GET.has_key('term'):
   cols = Col.objects.filter(name__istartswith = request.GET['term'])[:3]
   fes = Fe.objects.filter(name__istartswith=request.GET['term'])[:3]
   users = User.objects.filter(first_name__istartswith=request.GET['term'])[:3]
   json_str = ""
   if users:
    json_str = json.dumps([{'label': user.first_name, 'value': '/'+ user.username + '/'} for user in users])
   if cols:
     json_str += json.dumps([{'label': col.name, 'value': col.get_absolute_url()} for col in cols])
   if fes:
     json_str += json.dumps([{'label': fe.name, 'value': fe.get_absolute_url()} for fe in fes])
   return HttpResponse(json_str)
 return HttpResponse()

这是使用 jQuery 进行自动补全的脚本:

$("#header-search-input").autocomplete({
      source: "/query_suggestions/",
      focus: function (event, ui) {
        $(event.target).val(ui.item.label);
        return false;
      },
      select: function (event, ui) {
        $(event.target).val(ui.item.label);
        window.location = ui.item.value;
        return false;
      }
    });

所以,输入值m 返回HttpResponse()[{"value": "/moni/", "label": "Moni"}, {"value": "/manisha/", "label": "Manisha"}][{"value": "/col/mira/", "label": "Mira"}]

但是,这不会在search-input-bar 下显示自动完成建议。但是,如果我输入mo,它会返回[{"value": "/moni/", "label": "Moni"}] 以及search-input-bar 下的建议。这是什么原因?

【问题讨论】:

    标签: javascript jquery django jquery-ui autocomplete


    【解决方案1】:

    从您的示例中可以看出,该代码不会生成有效的 JSON:列表之间没有逗号。

    您不想通过连接字符串来生成 JSON。相反,在 Python 中构建列表或字典,然后在最后转储到 JSON:

    data = []
    if users:
      data.append([{'label': user.first_name, 'value': '/'+ user.username + '/'} for user in users])
    if cols:
      data.append([{'label': col.name, 'value': col.get_absolute_url()} for col in cols])
    if fes:
      data.append([{'label': fe.name, 'value': fe.get_absolute_url()} for fe in fes])
    json_str = json.dumps(data)
    

    【讨论】:

    • 我认为输出应该是: [{"value": "/moni/", "label": "Moni"}, {"value": "/manisha/", "label" : "Manisha"},{"value": "/col/mira/", "label": "Mira"}]。你的回答会产生这样的结果: [[{"value": "/moni/", "label": "Moni"}, {"value": "/manisha/", "label": "Manisha"}], [ {“值”:“/col/mira/”,“标签”:“米拉”}]]。所以,还是不对。
    • 如果这是您想要的,您可以使用extend 而不是append
    • 这正是我所需要的 :D thanx!
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2015-08-11
    • 1970-01-01
    相关资源
    最近更新 更多