2013-03-05 16 views
9

Select2'ye yeni katılıyorum ve AJAX'ı bütünleştirme konusunda sorun yaşıyorum. Arama yaptığımda, sonuçlar sorguya göre filtrelenmiyor.Select2 Ajax sorguya göre sonuçları filtrelemiyor

Göründüğü gibi: http://i.imgur.com/dAPSSDH.png - Sonuçlarda doğru karakterlerin altı çiziliyor, ancak hiçbir şey filtrelenmiyor. Benim olmayan ajax Select2 ve gördüğüm örneklerde, filtreleme biraz otomatik olarak görünüyor, bu yüzden zaten inşa edilmiş daha iyi bir tane olduğu için özel bir filtre yazmak için tereddüt ediyorum. Burada,

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

Ayrıca benim JSON bir örnektir:

İşte benim kod

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

Herhangi bir fikir? Umarım sadece aptalca bir şey yapıyorum ve bu hızlı bir çözümdür. Herhangi bir yardım için şimdiden teşekkür ederiz.

+1

Bunu yapmak için daha iyi bir yolu olsaydı da! Benimle zaten tüm satırları varsa, sadece filtreleme yapmak için sunucuya gitmek için sezgisel bulamıyorum! –

cevap

9

Sonuçları filtrelemek için sunucu tarafında özel bir filtre yazmanız gerekecektir. Kutuya yazdıklarınız 'terim' olarak kaydedilir ve daha sonra ajax çağrısı ile bir 'q' istek parametresi olarak gönderilir. Yani ajax
url: "/ concepts/names_for_search? Q = türetilmiş"
numaralı çağrıya yalnızca filtrelenmiş sonuçları vermeli ve tüm sonuçları vermemelidir.

Select2 AJAX Arama kutusuna yazdığınız her zaman çağrı yapacak
Güncelleme. Sonuçları sunucu tarafında filtrelemek ve sonuçları arama kutusundaki metne göre döndürmek zorundasınız.
Ben

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); 
} 

aşağıdaki gibi benim JSP/Servlet uygulamasında kullanıyorum Kişisel JavaScript kodu doğrudur.

Seçme 2, kullanılır. http://www.indiewebseries.com/search?q=ind ve http://www.indiewebseries.com/search?q=in bağlantılarını açarsanız, elde edilen sonuçlar farklıdır ve 'q' parametresine dayanır.
Eğer halinde iken, aramalar için sonuçlar url için '/ kavramlar/names_for_search? Q = d' ve (yani filtrelenmeyen)

+0

Hey Teşekkürler ve üzgünüm bu cevap çok geç. Filtrelerini sadece AJAX yapmıyormuş gibi (belki de kaynak kodlarından kopyalayıp yapıştırarak) yeniden kullanmanın bir yolu var mı? Ayrıca bana gösterebileceğin örneklerden haberin var mı? Işık googling şaşırtıcı derecede az yükseldi. Yardımınız için çok teşekkür ederim. İnsanları bir kez tanıtabildiğim zaman kesinlikle bir tane alacaksınız. –

+1

@MichaelNomitch - Cevabı güncelledim. Bu yardımcı olur umarım. – darsheets

2

Bu soru sorulmuştur aynı '/ kavramlar/names_for_search? Q deri =' vardır github projesinde ve yanıt ise: sunucu tarafında filtre. AJAX kullanılmadığında denilen varsayılan filtre işlevi matcher parametreye Select2 belgelerinde mevcut:

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