用ajax调用函数,部分工作但部分不工作

时间:2016-01-22 02:40:04

标签: javascript jquery python ajax django

很抱歉,如果标题不是很清楚。我有与ajax功能一起使用的搜索引擎。现在,如果我在搜索框中键入t,则包含单词t的标签显示(例如,如果我键入t,然后测试显示)但是在我删除单词t后,所有标签都显示在结果部分中。这有意义吗?如果我不清楚,我会发布图片。我不确定为什么或如何解决这个问题。 在这里;我的代码。

<h3>Search</h3>
{% csrf_token %}
<input type="text" id="search" name="search" onkeyup="handle_keyup()"/>

<ul id="search-results">

</ul>

此处我无法删除搜索结果,因为这会显示搜索结果,但在此部分没有输入任何内容时,所有标记都会显示。 (它只显示我完成使用搜索栏时的所有内容)

我的ajax

function handle_keyup() {

       $.ajax({
           type: "POST",
           url: "/search/",
           data: { 
               'search_text' : $('#search').val(),
               'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
           },
           success: searchSuccess,
           dataType: 'html'
       });

   };


function searchSuccess(data, textStatus, jqXHR)
{
   $('#search-results').html(data);
}

问题可能发生在那里,但我也会发布后端。这是python django框架。

def search_titles(request):
# categories = SearchQuerySet().autocomplete(content_auto=request.POST.get('search_text', ''))
    categories = Category.objects.filter(name__icontains=request.POST.get('search_text', ''))
    return render_to_response('main/ajax_search.html', {'categories' : categories})

ajax_Search.html

{% if categories.count > 0 %}

{% for category in categories %}
   <li><a href="/category/{{category.name}}">{{ category.name }}</a></li>
{% endfor %}

{% else %}

<li>None to show!</li>


{% endif %}

提前致谢

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为当用户&#34;删除&#34;单词,您的handle_keyup函数被触发,向服务器发送''的搜索请求。

然后,服务器在类别名称中查找空字符串'',并在所有类别中找到它。

一种方法是服务器检查搜索文本是否为空,如果是,则不返回任何内容。类似的东西:

def search_titles(request):
    txt = request.POST.get('search_text', '') 
    if txt:
        categories = Category.objects.filter(name__icontains=txt)
    else:
        categories = []

    return render_to_response('main/ajax_search.html', {'categories' : categories})