I have successfully gotten DataTables to fetch my data using server side processing. However, it gives me all the data without dividing it into pages and it doesn't sort the columns when I click the column headers. Can someone tell me what I'm doing wrong?
jquery
$('#medProcDataList').change(function() { //when the dropdown containing hospital codes changes
var $selectedValue = $(this).val();
var arrSelVal = $selectedValue.split(":");
$code = arrSelVal[0]; //get the selected hospital code
$('#results').DataTable( {
"processing": true,
"serverSide": true,
"ajax": {
"url": "./php/getDataForCode.php",
"type": "POST",
"dataSrc":"", //I think the problem is here
"data": {code: $code}
},
columns: [
{ title: "Hospital", data: "hospital_name" },
{ title: "Description", data: "raw_description" },
{ title: "Insurer", data: "full_payer_name" },
{ title: "Insurer type", data: "plan_type"},
{ title: "You Pay", data: "price" }
]
} );
});
PHP/SQL
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s", mysqli_connect_error());
exit;
}
mysqli_set_charset($db, 'utf8'); //important! or it won't echo the array
if( $_POST) {
$code = mysqli_real_escape_string($db, $_POST['code']);
$data = array();
$q = "SELECT hospital_name, raw_description, full_payer_name, plan_type, concat('$', format(price,2)) as price FROM hospital_transparency_data
where procedure_codes = '" . $code . "' order by hospital_name, full_payer_name";
$result = $db->query($q);
while($row = $result->fetch_array(MYSQLI_ASSOC)) {
//Add this row to the reply
$data[] = $row;
}
$db->close();
echo json_encode($data); //returns all data
} //if POST