2013-03-05 27 views
9

我是Select2的新手,並且無法集成AJAX。當我搜索時,結果不會根據查詢進行過濾。Select2 Ajax無法根據查詢過濾結果

下面是它的外觀:http://i.imgur.com/dAPSSDH.png - 結果中右側的字符爲下劃線,但沒有任何內容被濾除。在我的非ajax Select2和我見過的例子中,過濾似乎是自動發生的,所以我很猶豫是否需要編寫自定義過濾器,因爲可能已經有更好的過濾器了。

這裏是我的代碼:

<script> 
    $("#search_bar").select2({ 
    placeholder: "Search for another Concept", 
    minimumInputLength: 1, 
    ajax: { // instead of writing the function to execute the request we use Select2's convenient helper 
     url: "/concepts/names_for_search", 
     dataType: 'json', 
     data: function (term, page) { 
     return { 
     q: term, // search term 
     page: page 
     }; 
     }, 
     results: function (data, page) { 
     return { results: data}; 
     } 
    }, 
    }); 
</script> 

而且,這裏是我的JSON的例子:

[{"id":1,"text":"Limits"},{"id":2,"text":"Derivatives"},{"id":3,"text":"One-Sided Limits"},{"id":4,"text":"Formal Definition of a limit"}] 

任何想法?希望我只是在做一些愚蠢的事情,這是一個快速解決方案。預先感謝您的幫助。

+1

我也希望有一個更好的辦法來做到這一點!如果我已經有了所有的行,我不覺得直接去服務器進行過濾是很直觀的! – 2013-05-06 05:44:56

回答

9

您需要在服務器端編寫自定義過濾器來過濾結果。在框中鍵入的內容保存在'term'中,然後'q'作爲ajax調用的請求參數發送。所以ajax調用
url:「/ concepts/names_for_search?q = deri」
應該只返回過濾結果而不是所有結果。

更新
每當您在搜索框中輸入內容時,Select2都會進行AJAX調用。您必須在服務器端過濾結果,然後根據搜索框中的文本返回結果。
我使用它在我的JSP/Servlet應用如下

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    String searchTerm = request.getParameter("q"); 

    String json = getOptions(searchTerm); 
    //getOptions method will return a string of in JSON format 
    //[{"id":"1","name":"Derivatives"}] 
    response.getWriter().write(json); 
} 

你的JavaScript代碼是正確的。

我發現Select2被使用。如果打開鏈接http://www.indiewebseries.com/search?q=indhttp://www.indiewebseries.com/search?q=in,獲得的結果是不同的並且基於'q'參數。
而在你的情況下,對執行的結果,URL '/概念/ names_for_search?Q = d' 和 '/概念/ names_for_search?Q = DERI' 是一樣的(即不過濾)

+0

嘿,謝謝,抱歉,這個回覆太晚了。有什麼方法可以重用他們的過濾器,就好像我沒有在做AJAX(也許從他們的源代碼複製/粘貼)?另外,你知道任何你可以指給我的例子嗎?光谷歌搜索出乎意料地很少。非常感謝您的幫助 - 一旦我能夠鼓勵人們,您一定會得到一個。 – 2013-04-01 18:06:43

+1

@MichaelNomitch - 我已經更新了答案。希望這可以幫助。 – darsheets 2013-04-06 08:48:44

2

這個問題被問在github項目上,答案是:在服務器端進行過濾。 當不使用AJAX調用的默認篩選器的功能是目前的選擇二文檔中的matcher參數:

function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())>=0; }