jQuery Select2 で ajax を使って選択肢を取得する
はじめに
jQuery Select2 で、ajax で選択肢を取得する方法方法を調べた。
TL;DR
ajaxオプション内で設定url,dataオプションで API Request に関する設定processResultsオプションで API Response を受信した後の処理templateResult,templateSelectionオプションで見た目(HTML)の設定
目次
環境・条件
詳細
Ajax (remote data) | Select2 にドキュメントあるけど、正直わかりづらい。
JQuery Select2プラグインのリモート検索(インクリメンタルサーチ) - Qiita も読みつつ、手元で色々と試してようやく理解できた。
ミニマムコード
動作サンプル。
HTML ファイル。CDN から読み込んで、空の select タグだけ配置。
※諸々細かい部分は省略
1 | <head> |
JS 部分。GitHub のリポジトリ検索 APIを実行して、その結果を選択肢として表示する。
1 | $(document).ready(function() { |
data オプション
data が API Request に関するオプション。params.term に検索ワード(ユーザー入力値)が入っている。上記例では {q: params.term} を返却することで、?q=xxxx というクエリパラメータが付与された API を実行している。
もし ?name=xxxx のようなクエリパラメータで API を実行したい場合は、以下のように指定すれば良い。
1 | $("select.select2").select2({ |
processResults オプション
processResults が API Response に関するオプション。
まず、結果を表示するためのデータは下記の構造でなければならないことに注意しておく(processResults で最終的に以下のデータを返却する)。
1 | { |
「『id, text を持つ Object』の配列」を、キー results に対応する値とした Object を processResults で返却する。
第一引数 data に API Response が格納されているため、data.items の値をもとに上記構造のデータを生成して返却している。
1 | $(document).ready(function() { |
カスタマイズ
前述の内容がミニマムコードで、あとは良くあるカスタマイズについて。
使えるオプションは jQuery $.ajax options にまとまっている。
delay オプション
最終キー入力から API 実行まで、どのぐらいの間隔を空けるか。単位は msec。
1 | $(document).ready(function() { |
url オプション
/search?q=xxxx ではなく /search/xxxx のように、クエリパラメータではない形式にしたい場合などは、url に関数を指定すると良い。
1 | $(document).ready(function() { |
cache オプション
特に何も説明が書かれてないが、たぶんキャッシュが効くようになる(無駄なリクエストが減る)のだと思われる。
1 | $(document).ready(function() { |
templateResult, templateSelection オプション
ajax のオプションではないが、選択肢や選択結果の見た目を変更したい場合は templateResult, templateSelection オプションを使う。
processResults で返却したデータが利用可能なので、以下のように画像パスを含めておくことで、選択肢内にサムネイルを表示するということも可能。
1 | { |
まとめ
ajaxオプション内で設定url,dataオプションで API Request に関する設定processResultsオプションで API Response を受信した後の処理templateResult,templateSelectionオプションで見た目(HTML)の設定
その他・メモ
ちなみに、CDN の jQuery で最初 slim 版を使ってたら、Uncaught TypeError: o.ajax is not a function というエラーが出て動かずにどハマりした。
jQueryでajaxが使えない($.ajax is not a function) │ Web備忘録
参考文献
- Ajax (remote data) | Select2 - The jQuery replacement for select boxes
- JQuery Select2プラグインのリモート検索(インクリメンタルサーチ) - Qiita
- Options | Select2 - The jQuery replacement for select boxes
関連記事
- jQuery Select2 で、初期値の設定と選択状態のクリア
- jQuery Select2 で動的に選択肢を追加する
- jQuery Select2 で上限ありの複数選択
- Lozad.js で Lazy Load (非 jQuery)
- JavaScript で画像をローカルにダウンロード
- JavaScript で複数画像を zip に圧縮してローカルにダウンロード
- JavaScript で URL のクエリパラメータを操作する方法
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)