很抱歉,如果标题不是很清楚。我有与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 %}
提前致谢
答案 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})