 <p>I think you need to specify a "data" attribute on each column that needs to be populated from the returned data. Otherwise it doesn't know what attribute on the json object goes to each column. If you defined your data as an array of arrays instead of an array of objects this wouldn't be required.</p> <p>Additionally you aren't specifying a "dataSrc" option which isn't required but if it isn't set I believe it expects the returned JSON to be of the form:</p> <pre><code>{ data: [ {...}, {...} ] } </code></pre> <p>So it would be helpful if you could add in the raw response to the ajax request.</p> <p><strong>EDIT1:</strong> </p> <p>Ok so double checked and yes it does want an object array assigned to the "data" attribute on the JSON object so you can do something like this to fix this without having to modify anything on the server. Just change your ajax option to this:</p> <pre><code>"ajax": { "url": "Player/GetSetPlayers", "dataSrc": function ( json ) { // We need override the built in dataSrc function with one that will // just return the object array instead of looking for a "data" // attribute on the "json" object. Note if you ever want to add // serverside sorting/filtering/paging you will need to move your table // data to an attribute within the JSON object. return json; } } </code></pre> <p>So you will probably be good once you do both of the fixes above.</p>