JQuery DataTables – AJAX Reloading不工作

我正在使用DataTables来显示一些数据。 当添加新记录(通过AJAX)时,我试图在成功时重新加载表。 每当我尝试调用oTable.fnDraw()或oTable.fnReloadAjax()时,我都会收到错误“oTable is not defined”。 我究竟做错了什么?

我已经尝试了fnDraw()和fnReloadAjax(),并且都返回相同的错误。

$(document).ready(function(){ var oTable = $('.admin_users').dataTable({ "bProcessing": true, "sAjaxSource": 'sql/admin_users.php', "aaSorting": [[ 0, "asc" ]], "bJQueryUI": true, "sPaginationType": "full_numbers", // "sAjaxSource": 'SQL/dataTable.php', "bStateSave": true, //Use a cookie to save current display of items "aoColumns": [ null, null, null, null, { "sType": "date", "sClass":"center" } ], "bScrollCollapse": true, "sScrollX": "100%" }); oTable.fnAdjustColumnSizing(); 

手动重绘按钮:

 $('#click_me').click( function () { oTable.fnDraw(); //oTables.fnReloadAjax(); }); 

oTable是对数据表的局部变量引用,它在文档就绪函数之外无效。

改为:

  $('#click_me').click( function () { $('.admin_users').dataTable().fnReloadAjax(); } ); 

`这段代码对我有用……

 $(document).ready(function(){ var oTable = $('#MyTab').dataTable({....}); $('#btnRefresh').click( function () { oTable.fnDraw(); } ); }` 

范围问题总是很棘手。 我并不是自称是专家,但这种方式对我来说似乎相当一致:

  1. 在全局范围内创建新对象。
  2. 特定于我的应用程序的所有其他函数和变量都驻留在此对象中。 该技术只是通过对象进行命名空间
  3. 确保脚本的合理排序:首先是jQuery,然后是任何其他第三方插件,然后是应用程序脚本; 只调用文档就绪函数(如果正在使用)。

使用对象创建命名空间的示例:

 var myApp = myApp || {}; // create it if the variable isn't already being used myApp.oTable = $('#admin_users').dataTable({ parameters }); myApp.someUtilityFunction = function(foo) { alert(foo) }; 

顺便说一句,你可以看到我在上面的例子中使用了我的dataTable的ID。 选择器是一个选择器,所以你的选择器会工作,但无论如何它总是一个唯一的表,所以ID选择器更有效率。 我也不是100%确定dataTable()是否仅在选择器返回的第一个节点上运行(我希望如此!),这是一个潜在的问题。

有了这个,您可以毫不畏惧地将文档中的点击绑定到准备状态:

 $(function() { $('#click_me').click( function () { myApp.oTable.fnReloadAjax(); // if script is available }); }); 

另外,如果#click_me有被破坏的危险(例如,在正在重绘的表中!),最好使用.delegate()(jQuery 1.6.x)或.on()( 1.7及以上)

oTable是对数据表的局部变量引用,它在文档就绪函数之外无效。

是的你可以。

 var oTable; $(document).ready(function() { oTable = $('.admin_users').dataTable({ }); }); $('[name=insert]').live('click', function(){ $DT.RowInsert(this); oTable.fnReloadAjax(); return false; }); 

您可以使用数据表的ajax.reload方法重新加载数据表,请尝试这些。

 $('#click_me').click( function () { oTable.ajax.reload(); }); 

如果您只是想重新加载数据以获取最新记录,请在关键时刻调用点击事件

  - $("#tableToCallEvent").find('.sorting').eq(0).click(); 

你可以改变eq(0)的值,其中0是表格中tbody第一列的索引

简单易用:)