我如何使用jquery自动完成

时间:2011-12-19 17:13:24

标签: jquery django django-views

我如何使用jquery autocomplete?你能帮我吗?谢谢

更新:我写了以下视图。没有ajax,哪个工作正常。现在我想与ajax集成。我累了很多。但没发现运气。我需要你的帮助。谢谢你们

更新了views.py

def search(request):
errors = []
if 'q' in request.GET:
    q = request.GET['q']
    if not q:
        errors.append('Enter a search term.')
    else:

        categories = UserProfile.objects.filter(user=request.user)[0]
        languages = categories.language.all()

        movies = Movie.objects.filter(title__istartswith=q,language__in=languages)
        results = [ x.title for x in movies ]
        json = simplejson.dumps(results)
        return HttpResponse(json, mimetype="application/json")

我的表格

<form action="/search/" method="get">
    <input type="text" name="q" id ="q">
    <input type="submit" value="Search">
</form>

UPDATE3:当我使用以下ajax函数时。有效。它在terminal中显示数据。但问题是它没有在输入字段中显示电影列表。

enter image description here d

我的ajax

    <script>
   $(document).ready(function() {  
    $("#q").autocomplete("/search/");  
});
    </script>

更新4:我刚刚更改了代码。现在它在一行中显示内容。这是截图。 enter image description here

更新5:当我使用此return HttpResponse(json, mimetype="plan/text")时,它有效。但问题是一样的(一行中的所有内容)。如果我使用return HttpResponse(json, mimetype="application/json")它不起作用。

2 个答案:

答案 0 :(得分:0)

如果您不必编写自己的Ajax,可以使用此tutorial。这是我自动完成工作的方式。如果您在评论中发布此工作帖有任何问题。

答案 1 :(得分:0)

您使用'q'作为get字符串,但jquery自动完成小部件期望它被称为'term'。您需要在视图开头进行以下更改:

if 'term' in request.GET:
    q = request.GET['term']
    if not q:
        errors.append('Enter a search term.')
    ...

编辑:在OP更新问题之前添加了答案的下一部分,json对结果进行了编码。

您不能只返回电影的查询集 - 它必须采用自动完成小部件可以理解的格式。最简单的方法是返回一个名称列表(与您尝试使用编程语言的示例相同。视图的结尾应如下所示:

# import at the top of your views.py
from django.utils import simplejson
...
movies = Movie.objects.filter(title__istartswith=q,language__in=languages)
results = [ x.title for x in movies ] # this is good, you didn't need to comment it out!
# now encode the results as json, and return them
return HttpResponse(simplejson.dumps(results), mimetype="application/json")

了解您如何继续,并在遇到问题时发表评论。