2016-01-22 161 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

你把兩個))那裏,修復後,搜索功能不起作用 –