Cómo obtener datos de MSSQL Query para DataTables usando Ajax

Este es el código que obtengo de DataTables Child Rows

$(document).ready(function() { var table = $('#example').DataTable( { "ajax": "../ajax/data/objects.txt", //here "columns": [ { "className": 'details-control', "orderable": false, "data": null, "defaultContent": '' }, //and here to fetch the data below { "data": "name" }, { "data": "position" }, { "data": "office" }, { "data": "salary" } ], "order": [[1, 'asc']] } ); 

Me gustaría obtener los datos de una consulta SQL utilizando ajax. Esta es mi consulta SQL:

 $tsql = "SELECT * FROM [dbo].[ITEM_MASTER] A INNER JOIN [dbo].[STOCK] B ON B.ItemId = A.ItemId "; $result = sqlsrv_query($conn, $tsql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET )); if (!$result) { die("Query to show fields from table failed"); } while($row=sqlsrv_fetch_array($result)) { $ItmId = $row['ItemId']; $ItmName = $row['ItemName']; $ItmType = $row['ItemType']; $ItmGroup = $row['ItemGroup']; $ItmClass = $row['ItemClass']; $ItmSerialNum = $row['ItemSerialNum']; $ItmUOM = $row['ItemUOM']; $StkQty = $row['StockQuantity']; $StkId = $row['StockId']; } 

Y en la parte ajax, solo llamo el nombre de la variable como $ItmId o como he indicado en mi bucle while. ¿Es posible? ¿Si es así, cómo? Ya que no tengo ningún conocimiento sobre AJAX


ACTUALIZAR

Los datos se enviaron al segundo parámetro y no muestra el ItmId ? ¿Y no importa si cambio $data : ItmName solo se muestra en función de los arreglos y muestra algo más?

 $(document).ready(function() { var table = $('#table').DataTable( { "ajax": { "url": "table_data.php", "type": "POST" }, "columns": [ { "class": 'details-control', "orderable": false, "data": null, "defaultContent": '' }, { "$data": "ItmId" }, { "$data": "ItmName" }, { "$data": "ItmGroup"}, { "$data": "ItmClass"} ], "order": [[1, 'asc']] } ); 

En primer lugar, necesita cambiar esta línea:

 "ajax": "../ajax/data/objects.txt", //here 

para apuntar al archivo real que ejecutará la consulta de SQL para obtener los datos: es decir, así:

 "ajax": {"url": "path/to/phpfile.php", "type": "POST"} 

Necesitas hacer tu bucle while así:

 $data = array(); while($row=sqlsrv_fetch_array($result)) { $ItmId = $row['ItemId']; $ItmName = $row['ItemName']; $ItmType = $row['ItemType']; $ItmGroup = $row['ItemGroup']; $ItmClass = $row['ItemClass']; $ItmSerialNum = $row['ItemSerialNum']; $ItmUOM = $row['ItemUOM']; $StkQty = $row['StockQuantity']; $StkId = $row['StockId']; $data['data'][] = array($ItmId, $ItmName, $ItmType,....etc); } echo json_encode($data); 

Debe tener en cuenta que necesita la cantidad exacta de columnas en su tabla real (html). Además, tu json debería verse así:

 data: array( ItmId, ItmName, ..etc ), array( ItmId, ItmName, ..etc ), 

Esencialmente tienen una matriz de filas.

Basado en la respuesta de Darren, lo resolví así:

table_data.php

  $data = array(); while($row=sqlsrv_fetch_array($result)) { $data['data'][] = array( 'ItmId' => $row['ItemId'], 'ItmName' => $row['ItemName'], 'ItmType' => $row['ItemType'], 'ItmGroup' => $row['ItemGroup'], 'ItmClass' => $row['ItemClass'], 'ItmSerialNum' => $row['ItemSerialNum'], 'ItmUOM' => $row['ItemUOM'], 'StkQty' => $row['StockQuantity'], 'StkId' => $row['StockId'] ); } echo json_encode($data); 

table.php (donde muestro mi html)

 $(document).ready(function() { var table = $('#table').DataTable( { "ajax": { "url": "table_data.php", "type": "POST" }, "columns": [ { "class": 'details-control', "orderable": false, "data": null, "defaultContent": '' }, { "data": "ItmId"}, { "data": "ItmName"}, { "data": "ItmClass"}, { "data": "ItmUOM"} ], "order": [[1, 'asc']] } );