oSettings is NULL at redraw after deleting row on server side
oSettings is NULL at redraw after deleting row on server side

Hi All,
Thanks for the great plugin Alan! I'm trying to create a table with a server side source. I have this working well. Each row should have a delete button for the record. I have code that removes the record on the server side. I want to redraw in the callback function, so that the deleted record disappears. I keep getting an error on line 2707 of the dataTables script: "oSettings is NULL".
[code]line 2705 function _fnReDraw( oSettings )
line 2706 {
line 2707 if ( oSettings.oFeatures.bSort )[/code]
This is the code for deleting the record:
[code]//Delete rows
jQuery("#batchsearchform .subbatch_verwijderen").live("click",function(){
var vDeelPartijID = Right(jQuery(this).closest("tr").find("td:nth-child(4) div").attr("id"), jQuery(this).closest("tr").find("td:nth-child(4) div").attr("id").length - 8);
var vVrachtboncode = jQuery(this).closest("tr").find("td:nth-child(5) div").text();
if (confirm("Are you sure you want freight "+vVrachtboncode+" to be removed?")) {
var vDelete = "True";
}
jQuery.post("includes/del_deelpartij.php", { Delete: vDelete, DeelPartijID: vDeelPartijID }, function(data) {
if (data) {
var vDeelPartijRow = "#subbatch"+data;
jQuery(vDeelPartijRow).closest("tr").slideUp("slow", function () {
var vVrachtboncode = jQuery(this).find("td:nth-child(5) div").text();
jQuery(this).remove();
oTable.fnDraw(true);
alert("Freight "+vVrachtboncode+" was removed.");
});
}
});
});[/code]
Right is a custom function similar to the Visual Basic Right function (http://msdn.microsoft.com/en-us/library/dxs6hz0a%28v=vs.80%29.aspx). I use it here to take the required database ID from the right side of the HTML #ID.
oTable is defined as follows:
[code]var oTable = jQuery('#batchsearchcontainer').dataTable( {
"bProcessing": true,
"bServerSide": true,
"bStateSave": true,
"sPaginationType": "full_numbers",
"iDisplayLength": 25,
"sAjaxSource": "/geoviewer/includes/dataTables/server_processing.php",
"sDom": '<"top"<"toolbar"lip<"clear">><"clear">>rt',
"oLanguage": {
"oPaginate": {
"sFirst": "Eerste",
"sLast": "Laatste",
"sNext": "Volgende",
"sPrevious": "Vorige",
},
"sInfo": "Resultaten _START_ - _END_ van _TOTAL_",
"sInfoEmpty": "Geen gegevens gevonden",
"sInfoFiltered": "in set van _MAX_ records",
"sLengthMenu": "Toon _MENU_ resultaten per pagina",
"sProcessing": "Verwerken...",
"sSearch": "Zoeken",
"sZeroRecords": "Geen gegevens gevonden"
}
});[/code]
I hope someone can help me out. I found several reasons why "oSettings is NULL" can pop up, but I haven't found an answer to why this may happen at redraw only (the initial draw works fine, just as redraws that are automatically initiated (e.g. by sorting or filtering).
I would appreciate any help greatly!
Best regards,
Martijn Senden.
Thanks for the great plugin Alan! I'm trying to create a table with a server side source. I have this working well. Each row should have a delete button for the record. I have code that removes the record on the server side. I want to redraw in the callback function, so that the deleted record disappears. I keep getting an error on line 2707 of the dataTables script: "oSettings is NULL".
[code]line 2705 function _fnReDraw( oSettings )
line 2706 {
line 2707 if ( oSettings.oFeatures.bSort )[/code]
This is the code for deleting the record:
[code]//Delete rows
jQuery("#batchsearchform .subbatch_verwijderen").live("click",function(){
var vDeelPartijID = Right(jQuery(this).closest("tr").find("td:nth-child(4) div").attr("id"), jQuery(this).closest("tr").find("td:nth-child(4) div").attr("id").length - 8);
var vVrachtboncode = jQuery(this).closest("tr").find("td:nth-child(5) div").text();
if (confirm("Are you sure you want freight "+vVrachtboncode+" to be removed?")) {
var vDelete = "True";
}
jQuery.post("includes/del_deelpartij.php", { Delete: vDelete, DeelPartijID: vDeelPartijID }, function(data) {
if (data) {
var vDeelPartijRow = "#subbatch"+data;
jQuery(vDeelPartijRow).closest("tr").slideUp("slow", function () {
var vVrachtboncode = jQuery(this).find("td:nth-child(5) div").text();
jQuery(this).remove();
oTable.fnDraw(true);
alert("Freight "+vVrachtboncode+" was removed.");
});
}
});
});[/code]
Right is a custom function similar to the Visual Basic Right function (http://msdn.microsoft.com/en-us/library/dxs6hz0a%28v=vs.80%29.aspx). I use it here to take the required database ID from the right side of the HTML #ID.
oTable is defined as follows:
[code]var oTable = jQuery('#batchsearchcontainer').dataTable( {
"bProcessing": true,
"bServerSide": true,
"bStateSave": true,
"sPaginationType": "full_numbers",
"iDisplayLength": 25,
"sAjaxSource": "/geoviewer/includes/dataTables/server_processing.php",
"sDom": '<"top"<"toolbar"lip<"clear">><"clear">>rt',
"oLanguage": {
"oPaginate": {
"sFirst": "Eerste",
"sLast": "Laatste",
"sNext": "Volgende",
"sPrevious": "Vorige",
},
"sInfo": "Resultaten _START_ - _END_ van _TOTAL_",
"sInfoEmpty": "Geen gegevens gevonden",
"sInfoFiltered": "in set van _MAX_ records",
"sLengthMenu": "Toon _MENU_ resultaten per pagina",
"sProcessing": "Verwerken...",
"sSearch": "Zoeken",
"sZeroRecords": "Geen gegevens gevonden"
}
});[/code]
I hope someone can help me out. I found several reasons why "oSettings is NULL" can pop up, but I haven't found an answer to why this may happen at redraw only (the initial draw works fine, just as redraws that are automatically initiated (e.g. by sorting or filtering).
I would appreciate any help greatly!
Best regards,
Martijn Senden.
This discussion has been closed.
Replies
Any ideas anyone? I am still not sure why I get the error "oSettings is NULL". If I need to give additional information, please let me know, I'll be happy to give it!
Best regards,
Martijn.
[code]oTable.fnDraw();[/code]
with:
[code]var oSettings = oTable.fnSettings();
oTable.oApi._fnDraw( oSettings );[/code]
But this doesn't help. I now get "oSettings is null" on line 2508:
[code]2502 function _fnDraw( oSettings )
2503 {
2504 var i;
2505 var anRows = [];
2506 var iRowCount = 0;
2507 var bRowError = false;
2508 var iStrips = oSettings.asStripClasses.length;
etc...[/code]
Any ideas on why oSettings is null in my example?
Best regards,
Martijn.
If you add
[code]
console.log( oTable, oTable.fnSettings() );
[/code]
what do you get on the console?
Allan
Thanks for your reply! I added the line you suggested to the script, just before the oTable.fnDraw instruction. I get this console log:
[code][]
context Document geoviewer.php#geoviewer_overlay
dataTableExt Object { sVersion="1.5.6", iApiIndex=0, more...}
dataTableSettings [Object { sInstance="batchsearchtable", oFeatures={...}, more...}]
jquery "1.3.2"
length 0
oApi Object {}
selector "#batchsearchcontainer"
__proto__ Object { jquery="1.3.2", dataTableSettings=, dataTableExt={...}}
null[/code]
So, I think oSettings really is null... oTable seems to be filled however. I don't understand where the #batchsearchcontainer selector comes from. This selector is present as a container div for the table/form, but it is not used in the initialization of oTable. Don't know if that may be related to my problems...?
I hope this helps. I really have no clue what's going on (no javascript-guru, alas).
Best regards,
Martijn.
Best regards,
Martijn.
[code]
jQuery('#batchsearchcontainer').dataTable().fnDraw(true);
[/code]
and see what happens. That will get the original DataTables object, based on the given table node - that will remove any local or global scoping issues...
Allan