Click here to Skip to main content
15,894,180 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I'm new to DataTables.net and just can't figure out what I am missing, it's driving me crazy. It comes back with "aData is undefined" in the errors console.
I'm using DataTables 1.9.4 with the supplied in that package jQuery (not that it matters that much, I think).

HTML:

HTML
<table id="dt-enrollments">
		<thead>
			<tr>
				<th>Name</th>
				<th>Campus</th>
				<th>Advisor</th>
				<th>Steps Completed</th>
				<th>Paid</th>
				<th>Started</th>
				<th>Completed</th>
				<th>Options</th>
			</tr>
		</thead>
		<tbody>
		</tbody>
	</table>


JS:

JavaScript
$(document).ready(
			function()
			{
				$('#dt-enrollments').dataTable(
					{
						'sPaginationType': 'full_numbers',
						'bProcessing': true,
						'sAjaxSource': '/admin/api/enrollments',
						'oLanguage' :
							{
								'sProcessing': 'Loading enrollments, please wait...'
							}
					});
			});


Response from /admin/api/enrollments per FireBug:

[{"Name":"name1","Campus":"campus1","Advisor":"advisor1","StepsCompleted":1,"Paid":true,"Started":"2013-06-15T04:07:08.7848004-04:00","Completed":"2013-06-15T04:07:08.7848004-04:00","Options":""},{"Name":"name2","Campus":"campus2","Advisor":"advisor2","StepsCompleted":2,"Paid":true,"Started":"2013-06-15T04:07:08.7848004-04:00","Completed":"2013-06-15T04:07:08.7848004-04:00","Options":""},{"Name":"name3","Campus":"campus3","Advisor":"advisor3","StepsCompleted":3,"Paid":true,"Started":"2013-06-15T04:07:08.7848004-04:00","Completed":"2013-06-15T04:07:08.7848004-04:00","Options":""},{"Name":"name4","Campus":"campus4","Advisor":"advisor4","StepsCompleted":4,"Paid":true,"Started":"2013-06-15T04:07:08.7848004-04:00","Completed":"2013-06-15T04:07:08.7848004-04:00","Options":""}]


What am I missing here?


Thank you in advance!
Posted

1 solution

I figured it out. First, JSON is not in the correct format - you don't just return data, you need to return some other stuff, too:

{"sEcho":1,"iTotalRecords":4,"iTotalDisplayRecords":4,"sColumns":["Advisor","Campus","Completed","Name","Paid","Started","StepsCompleted","Options"],"aaData":[{"Name":"name1","Campus":"campus1","Advisor":"advisor1","StepsCompleted":1,"Paid":true,"Started":"2013-06-15T20:24:07.3187581-04:00","Completed":"2013-06-15T20:24:07.3187581-04:00","Options":""},{"Name":"name2","Campus":"campus2","Advisor":"advisor2","StepsCompleted":2,"Paid":true,"Started":"2013-06-15T20:24:07.3187581-04:00","Completed":"2013-06-15T20:24:07.3187581-04:00","Options":""},{"Name":"name3","Campus":"campus3","Advisor":"advisor3","StepsCompleted":3,"Paid":true,"Started":"2013-06-15T20:24:07.3187581-04:00","Completed":"2013-06-15T20:24:07.3187581-04:00","Options":""},{"Name":"name4","Campus":"campus4","Advisor":"advisor4","StepsCompleted":4,"Paid":true,"Started":"2013-06-15T20:24:07.3187581-04:00","Completed":"2013-06-15T20:24:07.3187581-04:00","Options":""}]}


And then, you also need to define columns in your JS:

JavaScript
$(document).ready(
			function()
			{
				$('#dt-enrollments').dataTable(
					{
						'sPaginationType': 'full_numbers',
						'bProcessing': true,
						'sAjaxSource': '/admin/api/enrollments',
						'sAjaxDataProp': 'aaData',
						'aoColumns': [
							{ 'mDataProp': 'Name' },
							...	
							{ 'mDataProp': 'Options' }
						],
						'oLanguage' :
							{
								'sProcessing': 'Loading enrollments, please wait...'
							}
					});
			});


If you are doing it in with .NET and in C#, you would have a corresponding class like this:

C#
public class Enrollment
{
	public string Name { get; set; }
	...
	public string Options { get; set; }
}


And your JSON output method would be something like this:

C#
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method = "GET")]
public object GetEnrollments()
{
	return new
		{
			sEcho = 1,
			iTotalRecords = 4,
			iTotalDisplayRecords = 4,
			sColumns = new List<string> { "Advisor", ..., "Options" },
			aaData = new List<enrollment>
				{
					new Enrollment { Advisor = "advisor1", ..., Options = "" },
					new Enrollment { Advisor = "advisor2", ..., Options = "" },
					new Enrollment { Advisor = "advisor3", ..., Options = "" },
					new Enrollment { Advisor = "advisor4", ..., Options = "" }
				}
		};
}


I hope this helps someone who's new to DataTables.net :)
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900