I'm trying to use JQuery DataTables with Salesforce JavaScript Remoting. Is there a way to delay datatables initialization? I want to do that otherwise datatables think there are no rows in the table. It takes fraction more time for remoting method to retrieve data. I tried using setTimeOut but I'm getting an error:
TypeError: i is undefined
My JavaScript:
<script type="text/javascript">
j$ = jQuery.noConflict();
j$(document).ready(function() {
window.setTimeout(setUpDataTable, 5000);
});
function setUpDataTable() {
j$('#divTable table').DataTable( {
});
}
</script>
I even tried initializing datatable on callback:
<head>
<apex:includeScript value="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" />
<apex:includeScript value="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js" />
</head>
<script type="text/javascript">
j$ = jQuery.noConflict();
j$(document).ready(function() {
j$('#divTable').append('<table />');
getRemoteData('something', false);
getRemoteData('something1', false);
getRemoteData('something2', false);
getRemoteData('something3', true);
});
function getRemoteData(controllerParams, initializeDataTable) {
Visualforce.remoting.Manager.invokeAction(
'{!$RemoteAction.MyController.GetData}',
controllerParams,
function(result, event){
if (event.status) {
j$('#divTable table').append('<tr> <td>' + results.Date__c + '</td> </tr>');
if (initializeDataTable)
{
j$('#divTable table').DataTable( {
//to do sorting
});
}
} else if (event.type === 'exception') {
document.getElementById("responseErrors").innerHTML =
event.message + "<br/>\n<pre>" + event.where + "</pre>";
} else {
document.getElementById("responseErrors").innerHTML = event.message;
}
},
{escape: true}
);
}
</script>
<section class="">
<div id="divTable" style="background-color:#ececec"></div>
</section>