2013-03-05 8 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

Я тоже хочу там был лучший способ сделать это! Я не считаю его интуитивным, чтобы перейти на сервер, чтобы сделать фильтрацию, если у меня есть все строки уже со мной! –

ответ

9

Чтобы отфильтровать результаты, вам нужно будет написать собственный фильтр на стороне сервера. То, что вы вводите в поле, сохраняется в «term», а затем «q» отправляется как параметр запроса с помощью вызова ajax. Таким образом, вызов ajax для
url: "/ понятия/names_for_search? Q = deri"
должен возвращать только отфильтрованные результаты и не все результаты.

Update
Выбор2 будет сделать 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=ind и http://www.indiewebseries.com/search?q=in, полученные результаты различны и основаны на параметре «q».
Хотя в вас случае, результаты для звонков в URL «/ понятия/names_for_search? Д = д» и «/ понятия/names_for_search? Q = Дери» являются одинаковыми (т.е. не фильтруются)

+0

Привет, спасибо, и жаль, что этот ответ так поздно. Есть ли способ просто повторно использовать свой фильтр, как будто я не делаю AJAX (возможно, копирование/вставка из исходного кода)? Кроме того, знаете ли вы какие-либо примеры, на которые вы могли бы указать мне? Легкий гуглинг неожиданно появился. Большое спасибо за вашу помощь - как только я смогу вытеснить людей, вы обязательно получите их. –

+1

@MichaelNomitch - я обновил ответ. Надеюсь это поможет. – darsheets

2

Этот вопрос был задан в проекте github, и ответ был: фильтр на стороне сервера. функция фильтра по умолчанию вызывается, когда AJAX не используется, присутствует в документации Select2 по параметру matcher:

function(term, text) { return text.toUpperCase().indexOf(term.toUpperCase())>=0; } 
Смежные вопросы