2013-03-05 12 views
9

Jestem nowy w Select2 i mam problemy z integracją AJAX. Podczas wyszukiwania wyniki nie są filtrowane na podstawie zapytania.Ajax Select2 nie filtruje wyników w oparciu o zapytanie

Oto, jak to wygląda: http://i.imgur.com/dAPSSDH.png - Właściwe znaki są podkreślone w wynikach, ale nic nie jest odfiltrowane. W moim nie-ajaxowym Select2 iw przykładach, które widziałem, filtrowanie wydaje się przebiegać nieco automatycznie, więc wahałem się napisać niestandardowy filtr, ponieważ prawdopodobnie jest już wbudowany lepszy.

Oto mój kod:

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

Również tutaj jest przykładem mojego JSON:

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

Jakieś pomysły? Mam nadzieję, że robię coś głupiego i jest to szybkie rozwiązanie. Z góry dziękuję za pomoc.

+1

ja też szkoda, że ​​nie było lepszego sposobu, aby to zrobić! Nie wydaje mi się intuicyjne, aby przejść do serwera tylko do filtrowania, jeśli mam wszystkie wiersze już ze mną! –

Odpowiedz

9

Będziesz musiał napisać niestandardowy filtr po stronie serwera, aby przefiltrować wyniki. To, co wpiszesz w polu, zostanie zapisane w "terminie", a następnie "q" zostanie wysłane jako parametr żądania z wywołaniem ajax. Tak więc wywołanie ajaxa do adresu
url: "/ concepts/names_for_search? Q = deri"
powinien tylko zwrócić przefiltrowane wyniki, a nie wszystkie wyniki.

Aktualizacja
Select2 wykona wywołanie AJAX po każdym wpisaniu w polu wyszukiwania. Musisz filtrować wyniki po stronie serwera, a następnie zwracać wyniki w oparciu o tekst w polu wyszukiwania.
używam go w mojej aplikacji JSP/servlet jak poniżej

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

Twój kod JavaScript jest poprawna.

Znalazłem Select2 jest używany . Jeśli otworzysz łącze http://www.indiewebseries.com/search?q=ind i http://www.indiewebseries.com/search?q=in uzyskane wyniki są różne i oparte na parametrze "q".
ile w ty przypadku wyniki dla połączeń do url '/ koncepcje/names_for_search? Q = d' i '/ koncepcje/names_for_search q = deri' są takie same (nie filtrowane)

+0

Hej Dzięki i przepraszam, ta odpowiedź jest spóźniona. Czy istnieje sposób na ponowne wykorzystanie filtra, tak jakbym nie robił AJAX (może kopiować/wklejać ze swojego kodu źródłowego)? Czy znasz jakieś przykłady, na które mógłbyś wskazać? Zjawisko light-googling okazało się zaskakująco małe. Bardzo dziękuję za pomoc - gdy tylko uda mi się zdobyć poparcie ludzi, na pewno zdobędziesz jedną. –

+1

@MichaelNomitch - Zaktualizowałem odpowiedź. Mam nadzieję że to pomoże. – darsheets

2

to pytano w projekcie Github, a odpowiedź brzmiała: filtr po stronie serwera. Domyślna funkcja wywoływana, gdy filtr nie jest używany AJAX jest obecny w dokumentacji Select2 od parametru matcher:

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