2014-09-03 84 views
0

我有一个包含2个数组的多个对象的json数据,我将以下代码放在一起,使我只能进行一次调用并将结果拆分为2个表。我现在面临的问题是我无法再刷新表格了。我已尝试不同的选项,但得到无法重新初始化DataTable这是有道理的,所以我想我现在卡住了。刷新数据表时出错 - 无法重新初始化DataTable

代码:

$(document).ready(function(){ 
    setInterval (function(){ 
     $.getJSON("ajax/json.txt", function (pcheckdata){ 

     <!-- ------------------- Extract Only Alerts ---------------------- --> 
      $('#alert-table').dataTable({ 
       "bJQueryUI": true, 
       "data": pcheckdata.alerts, 
       "columns": [ 
        { "mData": "host" }, 
        { "mData": "description" } 
       ], 
      }); 

     <!-- ------------------- Extract Only Errors ---------------------- --> 
      $('#error-table').dataTable({ 
       "bJQueryUI": true, 
       "data": pcheckdata.errors, 
       "columns": [ 
        { data: 'host' }, 
        { data: 'description' } 
       ], 
      }); 
     }); 
    }, 1000); 
}); 

我的JSON结构

{ 
    "alerts": [ 
     { 
      "host": "server1", 
      "description": "Engine Alive" 
     }, 
     { 
      "host": "ftpserver", 
      "description": "Low free disk space" 
     } 
    ], 

    "errors": [ 
     { 
      "host": "server3", 
      "description": "Can't connect to MySQL server" 
     }, 
     { 
      "host": "server4", 
      "description": "SSQL timeout expired" 
     } 
    ] 
} 

HTML位:

<table id="alert-table" class="display" cellspacing="0"> 
    <thead class="t-headers"> 
     <tr> 
      <th>HOST</th> 
      <th>DESCRIPTION</th> 
     </tr> 
    </thead> 
</table> 

<table id="error-table" class="display" cellspacing="0"> 
    <thead class="t-headers"> 
     <tr> 
      <th>HOST</th> 
      <th>ERROR DESCRIPTION</th> 
     </tr> 
    </thead> 
</table> 

我很想知道是否有刷新在2代表的方式同一时间,因为数据只会被提取一次,或者更好地使用纯粹的JQUERY,并忘记数据表,因为它eems让我头痛

+0

你能告诉我有两个ID的HTML的一部分?我也使用dataTables。 – kefy 2014-09-03 11:18:21

+0

我已经添加了表位。这只是基本的表结构 – Chelseawillrecover 2014-09-03 11:23:13

回答

0

为什么你想重新整个表,只需创建表一次,并在ajax回调,清除表和添加数据。你使用的是哪个版本的数据表?我用旧的函数来清除和添加数据,新表格它会有所不同,但你知道这个想法。

下面是一个例子:

$(document).ready(function(){ 

    //Init datatables without data 

      <!-- ------------------- Extract Only Alerts ---------------------- --> 
      var alertTable = $('#alert-table').dataTable({ 
       "bJQueryUI": true, 

       "columns": [ 
        { "mData": "host" }, 
        { "mData": "description" } 
       ], 
      }); 

     <!-- ------------------- Extract Only Errors ---------------------- --> 
      var errorTable = $('#error-table').dataTable({ 
       "bJQueryUI": true, 

       "columns": [ 
        { data: 'host' }, 
        { data: 'description' } 
       ], 
      }); 

    setInterval (function(){ 
     $.getJSON("ajax/json.txt", function (pcheckdata){ 

     alertTable.fnClearTable(); //New API then alertTable.clear().draw(); 
     alertTable.fnAddData(pcheckdata.alerts); //New API then alertTable.row.add(pcheckdata.alerts); 
     alertTable.fnAdjustColumnSizing(); //New API then alertTable.columns.adjust().draw(); 

     errorTable.fnClearTable(); //New API then errorTable.clear().draw(); 
     errorTable.fnAddData(pcheckdata.errors); //New API then errorTable.row.add(pcheckdata.errors); 
     errorTable.fnAdjustColumnSizing();////New API then errorTable.columns.adjust().draw() 

     }); 
    }, 1000); 
}); 

另一种方法是检查,如果数据表已经被初始化。

$(document).ready(function(){ 
    setInterval (function(){ 
     $.getJSON("ajax/json.txt", function (pcheckdata){ 
     //Is datatable already init. 
     if (! $.fn.DataTable.isDataTable('#alert-table')) { 

     <!-- ------------------- Extract Only Alerts ---------------------- --> 
      $('#alert-table').dataTable({ 
       "bJQueryUI": true, 
       "data": pcheckdata.alerts, 
       "columns": [ 
        { "mData": "host" }, 
        { "mData": "description" } 
       ], 
      }); 
     }else 
     { 
      $('#alert-table').dataTable().clear().draw(); 
      $('#alert-table').dataTable().row.add(pcheckdata.alerts); 
      $('#alert-table').dataTable().columns.adjust().draw(); 
     } 
     if (! $.fn.DataTable.isDataTable('#error-table')) { 
     <!-- ------------------- Extract Only Errors ---------------------- --> 
      $('#error-table').dataTable({ 
       "bJQueryUI": true, 
       "data": pcheckdata.errors, 
       "columns": [ 
        { data: 'host' }, 
        { data: 'description' } 
       ], 
      }); 
     }else 
     { 
      $('#error-table').dataTable().clear().draw(); 
      $('#error-table').dataTable().row.add(pcheckdata.errors); 
      $('#error-table').dataTable().columns.adjust().draw(); 
     } 

     }); 
    }, 1000); 
}); 
+0

有趣!我见过类似这样的代码,所以会尝试一下。我使用最新版本1.10.2 – Chelseawillrecover 2014-09-03 11:24:44

+0

告诉我们,如果它的工作或没有,我们会尽力解决您的问题 – kefy 2014-09-03 11:26:23

+0

当然我会的。请给我大约30分钟的时间,现在就冲出去。非常感谢,非常感谢。 – Chelseawillrecover 2014-09-03 11:30:40