Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery数据表-AJAX重新加载不起作用_Jquery_Ajax_Datatables_Reload - Fatal编程技术网

JQuery数据表-AJAX重新加载不起作用

JQuery数据表-AJAX重新加载不起作用,jquery,ajax,datatables,reload,Jquery,Ajax,Datatables,Reload,我使用DataTables来显示一些数据。当添加新记录(通过AJAX)时,我试图在成功时重新加载表。每当我尝试调用oTable.fnDraw()或oTable.fnReloadAjax()时,就会出现错误“oTable未定义”。我做错了什么 我尝试了fnDraw()和fnReloadAjax(),但都返回了相同的错误 $(document).ready(function(){ var oTable = $('.admin_users').dataTable({ "bPro

我使用DataTables来显示一些数据。当添加新记录(通过AJAX)时,我试图在成功时重新加载表。每当我尝试调用oTable.fnDraw()或oTable.fnReloadAjax()时,就会出现错误“oTable未定义”。我做错了什么

我尝试了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
是对datatable的局部变量引用,在document ready函数之外无效

改为这样做:

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

范围问题总是棘手的。我并不是说自己是专家,但这种方式对我来说似乎一直有效:

  • 在全局范围中创建新对象
  • 特定于我的应用程序的所有其他函数和变量都驻留在此对象中。该技术只是通过一个对象来命名
  • 确保脚本顺序合理:首先是jQuery,然后是任何其他第三方插件,然后是应用程序脚本;仅在所有操作结束时调用documentready函数(如果正在使用)
  • 使用对象创建命名空间的示例:

    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是对datatable的局部变量引用,在document ready函数之外无效

    是的,你可以

    var oTable;
    $(document).ready(function() {
    
        oTable = $('.admin_users').dataTable({
        });
    });
    
    $('[name=insert]').live('click', function(){
    
        $DT.RowInsert(this);
        oTable.fnReloadAjax();
        return false;
    });
    
    ` 这个代码适合我

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

    若您只想重新加载数据以获得最新记录,只需调用键列上的click事件

     - $("#tableToCallEvent").find('.sorting').eq(0).click();
    
    您可以更改等式(0)的值,其中0是表中tbody第一列的索引


    简单易用:)

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

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

    出现以下错误:DataTables警告:无法重新初始化DataTable。若要检索此表的DataTables对象,请不向dataTable()函数传递任何参数,或将BRETRIVE设置为true。或者,要销毁旧表并创建新表,请将bDestroy设置为true(请注意,可以通过API对配置进行许多更改,这通常要快得多)。是否确实没有在click()函数中的dataTable()调用中传递任何参数?这似乎是错误信息的要点。在任何情况下,我使用相同的技术都没有问题-我对表的初始化有些不同(分页、处理和状态保存都是false),但是。是的,我完全复制了您的代码。尝试将其放置在$(document).ready块中以及该块之外。不走运。好吧,您可以尝试按照消息的建议指定{bRetrieve:True}。另外,我假设您已经将脚本与fnReloadAjax链接在一起了。它不是dataTables基本实现的一部分。