2016-01-22 116 views
0

对不起,如果标题不是很清楚。我有一个与AJAX功能兼容的搜索引擎。现在,如果我在搜索框中键入t,那么包含单词t的标签就会出现(例如,如果我输入t,然后显示测试),但事情是在删除单词t之后,所有标签显示在结果部分中。这有意义吗?如果我不清楚我会张贴图片。我不知道为什么或如何解决这个问题。 这是我的代码。调用函数与ajax,部分工作,但部分不工作

<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 %} 

在此先感谢

回答

0

发生这种情况,因为当用户“删除”这个词,你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}) 
+0

谢谢,这似乎有效,但是当我试了一下,给了我一个语法错误类别= Category.objects.filter(name__icontains = TXT)) 不知道为什么,因为它似乎有效,我没有在正确的地方标签。有没有办法通过其他方式解决这个问题? –

+0

嗯,这真的好像没有错误简单的代码,但为什么得到语法错误? –

+0

你把两个))那里,修复后,搜索功能不起作用 –