11

Select2を初めて使用し、AJAXの統合に問題があります。検索しても、クエリに基づいて結果がフィルタリングされていません。

外観は次のとおりです。http://i.imgur.com/dAPSSDH.png- 結果では正しい文字に下線が引かれていますが、除外されるものはありません。私の非ajaxSelect2と私が見た例では、フィルタリングはある程度自動的に行われるように見えます。そのため、カスタムフィルターを作成することを躊躇します。これは、おそらくより優れたフィルターがすでに組み込まれているためです。

これが私のコードです:

<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"}]

何か案は?うまくいけば、私はただ愚かなことをしているだけで、それは簡単な修正です。助けてくれてありがとう。

4

2 に答える 2

12

結果をフィルター処理するには、サーバー側でカスタム フィルターを作成する必要があります。ボックスに入力した内容は「term」に保存され、「q」が ajax 呼び出しのリクエスト パラメータとして送信されます。
したがって、 url:"/concepts/names_for_search?q=deri"への ajax 呼び出しは、
すべての結果ではなく、フィルター処理された結果のみを返す必要があります。

Update
Select2 は、検索ボックスに入力するたびに AJAX 呼び出しを行います。サーバー側で結果をフィルタリングしてから、検索ボックスのテキストに基づいて結果を返す必要があります。
以下のようにJSP /サーブレットアプリケーションで使用しています

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 '/concepts/names_for_search?q=d' と '/concepts/names_for_search?q=deri' への呼び出しの結果は同じです (つまり、フィルタリングされません)。

于 2013-03-22T19:55:38.560 に答える