Creé este violín y funciona bien según mis requisitos: Fiddle
Sin embargo, cuando uso lo mismo en mi aplicación, aparece un error en la consola del navegador que dice No se puede leer la propiedad 'aDataSort' de undefined
En mi aplicación, el javascript dice algo como lo siguiente: He comprobado la salida del controlador... funciona bien y también está impreso en la consola.
$(document).ready(function() { $.getJSON("three.htm", function(data) { // console.log("loadDataTable >> "+JSON.stringify(data)); }) .fail(function( jqxhr, textStatus, error ) { var err = textStatus + ', ' + error; alert(err); console.log( "Request Failed: " + err); }) .success(function(data){ loadDataTable(data); }); function loadDataTable(data){ $("#recentSubscribers").dataTable().fnDestroy(); var oTable = $('#recentSubscribers').dataTable({ "aaData" : JSON.parse(data.subscribers), "processing": true, "bPaginate": false, "bFilter": false, "bSort": false, "bInfo": false, "aoColumnDefs": [{ "sTitle": "Subscriber ID", "aTargets": [0] }, { "sTitle": "Install Location", "aTargets": [1] }, { "sTitle": "Subscriber Name", "aTargets": [2] }, { "aTargets": [0], "mRender": function (data, type, full) { return '<a style="text-decoration:none;" href="#" class="abc">' + data + '</a>'; } }], "aoColumns": [{ "mData": "code" }, { "mData": "acctNum" }, { "mData": "name" }] }); } })Es importante que su THEAD no esté vacío en la tabla. Dado que la tabla de datos requiere que especifique el número de columnas de los datos esperados. Según sus datos, debería ser
<table id="datatable"> <thead> <tr> <th>Subscriber ID</th> <th>Install Location</th> <th>Subscriber Name</th> <th>some data</th> </tr> </thead> </table>También tuve este problema, esta matriz estaba fuera de rango:
order: [1, 'asc'],Para mí, el error estaba en DataTables; El código para ordenar en DataTables 1.10.9 no verificará los límites; por lo tanto, si usa algo como
order: [[1, 'asc']]con una tabla vacía, no hay fila idx 1 -> esta excepción asegura. Esto sucedió cuando los datos de la tabla se recuperaron de forma asíncrona. Inicialmente, en la carga de la página, la tabla de datos se inicializa sin datos. Debe actualizarse más tarde, tan pronto como se obtengan los datos de resultados.
Mi solución:
// add within function _fnStringToCss( s ) in datatables.js // directly after this line // srcCol = nestedSort[i][0]; if(srcCol >= aoColumns.length) { continue; } // this line follows: // aDataSort = aoColumns[ srcCol ].aDataSort;