前回からの続き。。
DataTables によるHTMLテーブルは当然かんたんに Ajax 対応できる。
arrayでのレスポンス
簡単な例として、サーバへのAjax呼び出しの結果としてarrayを返却する場合。
HTML のテーブルは前回と同様。
<body> <table id="table_id"> <thead> <tr><th>Rendering engine</th><th>Browser</th><th>Platform(s)</th></tr> </thead> </table> </body> </html>
dataTable のパラメータとして、sAjaxSource を指定してサーバのパスを指定する。
<script> $(document).ready(function(){ $('#table_id').dataTable( { "bProcessing": true, "sAjaxSource": "/home/list.txt" }); });
bProcessing を指定することで、Ajax 呼び出し中に処理中の表示をしてくれる。
list.txt の内容は以下の感じ。
{ "aaData": [ [ "Trident", "Internet Explorer 4.0", "Win 95+" ], [ "Trident", "Internet Explorer 5.0", "Win 95+" ], [ "Trident", "Internet Explorer 5.5", "Win 95+" ], [ "Trident", "Internet Explorer 6", "Win 98+" ], [ "Trident", "Internet Explorer 7", "Win XP SP2+" ], [ "Trident", "AOL browser (AOL desktop)", "Win XP" ], [ "Gecko", "Firefox 1.0", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 2.0", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 3.0", "Win 2k+ / OSX.3+" ], [ "Gecko", "Camino 1.0", "OSX.2+" ], [ "Gecko", "Camino 1.5", "OSX.3+" ], [ "Other browsers", "All others", "-" ] ] }
Ajax で取得した list.txt の内容が表示される。
Object の例
サーバからのレスポンスを Object とする場合には、以下のようにプロパティ名を指定する。
$(document).ready(function(){ $('#table_id').dataTable( { "bProcessing": true, "sAjaxSource": "/home/list.txt", "aoColumns": [ { "mData": "engine" }, { "mData": "browser" }, { "mData": "platform" } ] }); }); </script>
返却値は Object 。
{ "aaData": [ { "engine": "Trident", "browser": "Internet Explorer 4.0", "platform": "Win 95+" }, { "engine": "Trident", "browser": "Internet Explorer 5.0", "platform": "Win 95+" }, { "engine": "Trident", "browser": "Internet Explorer 5.5", "platform": "Win 95+" }, { "engine": "Trident", "browser": "Internet Explorer 6", "platform": "Win 98+" }, { "engine": "Trident", "browser": "Internet Explorer 7", "platform": "Win XP SP2+" }, { "engine": "Trident", "browser": "AOL browser (AOL desktop)", "platform": "Win XP" }, { "engine": "Gecko", "browser": "Firefox 1.0", "platform": "Win 98+ / OSX.2+" }, { "engine": "Gecko", "browser": "Firefox 1.5", "platform": "Win 98+ / OSX.2+" }, { "engine": "Gecko", "browser": "Firefox 2.0", "platform": "Win 98+ / OSX.2+" }, { "engine": "Gecko", "browser": "Firefox 3.0", "platform": "Win 2k+ / OSX.3+" }, { "engine": "Gecko", "browser": "Camino 1.0", "platform": "OSX.2+" }, { "engine": "Gecko", "browser": "Camino 1.5", "platform": "OSX.3+" }, { "engine": "Other browsers", "browser": "All others", "platform": "-" } ] }
これだけだと意味がないわけで、
サーバから動的に結果を返却するには、クライアントからパラメータを送る必要があり、bServerSide を true として指定する。
<script> $(document).ready(function(){ $('#table_id').dataTable( { "bProcessing": true, "bServerSide": true, "sAjaxSource": "/home/list.htm" }); }); </script>
これにより、クライアントから以下のようなリクエストが発行される。
http://localhost:9090/home/list.htm?sEcho=1&iColumns=3&sColumns=&iDisplayStart=0&iDisplayLength=10&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&sSearch=&bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=true&sSearch_1=&bRegex_1=false&bSearchable_1=true&sSearch_2=&bRegex_2=false&bSearchable_2=true&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&_=1351519775180
パラメータの意味は、
リクエストパラメータ
型 | 名前 | 説明 |
---|---|---|
int | iDisplayStart | 現在のデータセットの表示開始位置 |
int | iDisplayLength | テーブルに表示できるレコード数 |
int | iColumns | 表示カラム数() |
string | sSearch | 検索フィールドの値 |
bool | bRegex | trueのばあい正規表現によるフィルタが有効 |
bool | bSearchable_(int) | クライアント側で各列の検索が有効となっているか |
string | sSearch_(int) | 各列のフィルター文字 |
bool | bRegex_(int) | trueのばあい各列の正規表現によるフィルターが有効 |
bool | bSortable_(int) | クライアント側で各列のソートが有効になっているか |
int | iSortingCols | ソートに使用する列の数 |
int | iSortCol_(int) | ソートの条件として使用されている列 |
string | sSortDir_(int) | 各列のソート条件"desc" または "asc" |
string | mDataProp_(int) | 各列の mDataProp プロパティの値 |
string | sEcho | テーブルのレンダリング時にDataTabelsが利用する情報 |
サーバからのレスポンス
型 | 名前 | 説明 |
---|---|---|
int | iTotalRecords | フィルタリングされる前の合計レコード数 |
int | iTotalDisplayRecords | フィルタリング後の合計レコード数 |
string | sEcho | クライアントからのリクエストのsEchoの値 |
string | sColumns | コンマで区切った列の名前(オプション) |
array | aaData | 2次元のarrayデータ |
例えば25レコードあってフィルタリングしていない場合は以下のレスポンスをサーバから返すことになる。
{ "iTotalRecords": 25, "iTotalDisplayRecords": 25, "sEcho": 1, "aaData": [ [ "Trident", "Internet Explorer 4.0", "Win 95+" ], [ "Trident", "Internet Explorer 5.0", "Win 95+" ], [ "Trident", "Internet Explorer 5.5", "Win 95+" ], [ "Trident", "Internet Explorer 6", "Win 98+" ], [ "Trident", "Internet Explorer 7", "Win XP SP2+" ], [ "Trident", "AOL browser (AOL desktop)", "Win XP" ], [ "Gecko", "Firefox 1.0", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 2.0", "Win 98+ / OSX.2+" ], [ "Gecko", "Firefox 3.0", "Win 2k+ / OSX.3+" ] ] }
レコードの総件数は25件だけど、Search の条件に合致するレコードが 15件とかだったら iTotalDisplayRecords の値を15とする。