jQuery自动完成功能无法正常工作

时间:2013-12-29 04:15:28

标签: javascript jquery django jquery-ui autocomplete

我正在为我的项目使用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()的{​​{1}}

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

1 个答案:

答案 0 :(得分:1)

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

您不希望通过连接字符串来生成JSON。相反,在Python中构建列表或dicts,然后在最后转储到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)