JQuery Datatables : Cannot read property 'aDataSort' of undefined

JavascriptJqueryJquery Datatables

Javascript Problem Overview


I created this fiddle to and it works well as per my requirements: Fiddle

However, when I use the same in my application I get an error in the browser console saying Cannot read property 'aDataSort' of undefined

In my application, the javascript reads something like as below: I have checked the controller output...it works well and is printed on the console too.

$(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"
		}]
		    });
		
	}		
			
})

Javascript Solutions


Solution 1 - Javascript

It's important that your THEAD not be empty in table.As dataTable requires you to specify the number of columns of the expected data . As per your data it should be

<table id="datatable">
    <thead>
        <tr>
            <th>Subscriber ID</th>
            <th>Install Location</th>
            <th>Subscriber Name</th>
            <th>some data</th>
        </tr>
    </thead>
</table>

Solution 2 - Javascript

Also had this issue, This array was out of range:

order: [1, 'asc'],

Solution 3 - Javascript

For me, the bug was in DataTables itself; The code for sorting in DataTables 1.10.9 will not check for bounds; thus if you use something like

order: [[1, 'asc']]

with an empty table, there is no row idx 1 -> this exception ensures. This happened as the data for the table was being fetched asynchronously. Initially, on page loading the dataTable gets initialized without data. It should be updated later as soon as the result data is fetched.

My solution:

// 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;

Solution 4 - Javascript

I faced the same problem, the following changes solved my problem.

$(document).ready(function() {
     $('.datatable').dataTable( {
            bSort: false,
            aoColumns: [ { sWidth: "45%" }, { sWidth: "45%" }, { sWidth: "10%", bSearchable: false, bSortable: false } ],
        "scrollY":        "200px",
        "scrollCollapse": true,
        "info":           true,
        "paging":         true
    } );
} );

the aoColumns array describes the width of each column and its sortable properties.

> Another thing to mention this error will also appear when you order by a column > number that does not exist.

Solution 5 - Javascript

In my case I had

$(`#my_table`).empty();

Where it should have been

$(`#my_table tbody`).empty();

Note: in my case I had to empty the table since i had data that I wanted gone before inserting new data.

Just thought of sharing where it "might" help someone in the future!

Solution 6 - Javascript

In my case I solved the problem by establishing a valid column number when applying the order property inside the script where you configure the data table.

var table = $('#mytable').DataTable({
     .
     .
     .
     order: [[ 1, "desc" ]],

Solution 7 - Javascript

Most of the time it occurs when something is undefined. I copied the code and removed few columns which disturbed the order by index. Carefully make changes and every variable after it. "order": [[1, "desc"]], fixed my issues previous i was using "order": [[24, "desc"]], and that index was not avaialble.

Solution 8 - Javascript

I had this problem and it was because another script was deleting all of the tables and recreating them, but my table wasn't being recreated. I spent ages on this issue before I noticed that my table wasn't even visible on the page. Can you see your table before you initialize DataTables?

Essentially, the other script was doing:

let tables = $("table");
for (let i = 0; i < tables.length; i++) {
  const table = tables[i];
  if ($.fn.DataTable.isDataTable(table)) {
    $(table).DataTable().destroy(remove);
    $(table).empty();
  }
}

And it should have been doing:

let tables = $("table.some-class-only");
... the rest ...

Solution 9 - Javascript

You need to switch single quotes ['] to double quotes ["] because of parse

if you are using data-order attribute on the table then use it like this data-order='[[1, "asc"]]'

Solution 10 - Javascript

I got the error by having multiple tables on the page and trying to initialize them all at once like this:

$('table').DataTable();

After a lot of trial and error, I initialized them separately and the error went away:

$("#table1-id").DataTable();
$("#table2-id").DataTable();

Solution 11 - Javascript

My Solution

add this :

order: 1 ,

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionswateekView Question on Stackoverflow
Solution 1 - JavascriptGkrishView Answer on Stackoverflow
Solution 2 - Javascripthogarth45View Answer on Stackoverflow
Solution 3 - JavascriptOliver ZendelView Answer on Stackoverflow
Solution 4 - JavascriptAbdul MananView Answer on Stackoverflow
Solution 5 - JavascriptJumpingElephantView Answer on Stackoverflow
Solution 6 - Javascriptuser13755332View Answer on Stackoverflow
Solution 7 - JavascriptWaqarTahirView Answer on Stackoverflow
Solution 8 - JavascriptRyan ShillingtonView Answer on Stackoverflow
Solution 9 - JavascriptMohitGhodasaraView Answer on Stackoverflow
Solution 10 - JavascriptMarstonView Answer on Stackoverflow
Solution 11 - JavascriptJoukharView Answer on Stackoverflow