JQuery DataTablesを使用しようとしましたが、エラーが発生します
TypeError:cは未定義です
JSONが正しく取得され、正しい形式であることを見ることができるため、コードの何が問題なのかわかりませんが、上記のエラーが発生することの何が問題なのかわかりません。
私のJSON:
{"Data":[{"LOGIN":10184},{"LOGIN":10214},{"LOGIN":10180},{"LOGIN":10187},{"LOGIN":10179},{"LOGIN":10280},{"LOGIN":201},{"LOGIN":10238},{"LOGIN":10296},{"LOGIN":10312}]}
と私のDataTablesコード:
$(document).ready(function() {
$('#tablename').dataTable( {
"processing": true,
"serverSide": true,
"ajax": {
"type": "POST",
"url": "https://test.com/api/db/select",
"data": function ( json ) { return JSON.stringify( { "Sql": 12 } );},
"contentType": "application/json; charset=utf-8",
"dataType": "json",
"processData": true,
beforeSend : function(xhr){
var access_token = sessionStorage.getItem('access_token');
xhr.setRequestHeader('Authorization', 'Bearer ' + access_token);
}
},
"dataSrc": "Data",
"columns": [
{ "data": "LOGIN" }
]
} );
} );
dataSrc
は特別なdataTables ajaxオプションであり、ajaxオブジェクト内に含める必要があります。
"ajax": {
"dataSrc": "Data", //<--- place dataSrc here instead
"type": "POST",
...
}
これをajaxの外に配置しました。そのため、dataTablesには、使用するソース(盲目的にajax応答を試行する以外に)またはLOGIN
が属する場所がわかりません。
追加したかどうかを確認します
<thead></thead>
<tbody></tbody>
これらを追加することでこの問題を解決しました。
したがって、基本的には次のような構造でなければなりません。
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
時々、このタイプの問題は、HTMLおよびdatatablesの列で不一致/不等の列を修正することで発生します。
"columns": [
null,
null,
null,
{"orderable": false, "width":"2%"},
],
上記のJavaScriptは4列を定義し、HTMLは5列を持っています
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
</tr>
したがって、両方の側のHTMlおよびDatatable構成を修正/等しくする必要があります。
"columns": [
null,
null,
null,
null, //Added New
{"orderable": false, "width":"2%"},
],
私の場合、thead内のthからcolspan属性を削除し、エラーを取り除く必要がありました;(
私の場合、ajax.dataSrc(data)関数を使用してデータを操作したため、同じエラーが発生しました。しかし、その後、データを返すのを忘れました。
"dataSrc": function ( json ) {
for ( var i=0, ien=json.data.length ; i<ien ; i++ ) {
//somethings...
}
return json.data;// I forgot this line, then i got the error "TypeError: c is undefined"
}
数分後、私はajax.dataSrc関数のドキュメントを確認しましたが、戻り値がないことに気付きました。
戻り値:array DataTablesがテーブルの描画に使用するデータの配列
あなたが同じ気晴らしを持っていないことを願っています...
私の場合、サーバー側でデータが欠落していると結果が返されます。
//Javascript
$('#table').DataTable({
sAjaxSource: '/load',
aoColumns: [
...
],
});
//server side(in Rails)
render json: {'aaData'=>data}