JQuery DataTables - AJAX Reloading不工作

时间:2011-11-07 21:47:29

标签: jquery ajax datatables reload

我正在使用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();
});

6 个答案:

答案 0 :(得分:4)

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

请改为:

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

答案 1 :(得分:2)

` 这段代码对我有用......

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

    $('#btnRefresh').click( function () {
       oTable.fnDraw();
    } );
}`

答案 2 :(得分:1)

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

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

    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及以上)

答案 3 :(得分:0)

  

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

是的,你可以。

var oTable;
$(document).ready(function() {

    oTable = $('.admin_users').dataTable({
    });
});

$('[name=insert]').live('click', function(){

    $DT.RowInsert(this);
    oTable.fnReloadAjax();
    return false;
});

答案 4 :(得分:0)

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

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

答案 5 :(得分:-1)

如果您只想重新加载数据以获取最新记录,只需在关键字段上调用点击事件

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

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

简单易行:)