2017-01-19 177 views
1

我已經將DataTables添加到表中,我使用PHP和SQL通過AJAX獲取數據。在第一次加載時,在執行第一次搜索後,一切正常,一切按預期工作。但是,當第二次搜索時,所有用於搜索的代碼都已經重新運行,DataTable功能似乎停止工作。JQuery AJAX DataTable在加載數據後不加載標準函數

我在DataTable文件中的關鍵部分添加了一些警報,並在第一次搜索後發現它永遠不會將它重新存入文件。

我雖然也許我需要「重新初始化」數據表看到整個數據內容已經改變後,我再次搜索。

花了很長時間在網上看,很多建議都圍繞着銷燬和清除等。但似乎沒有任何工作。

這裏是我的代碼,你可以看到我有它設置做一些第一次搜索後不同,但不知道如何解決這個問題,如排序,分頁,搜索等所有不工作:

$.ajax({ 
    type:'POST', 
    url:'/ITSMIS/data/asset/search.php', 
    data:HardwareAsset, 
    dataType: "html", 
    success:function(data){ 

     LoadDataTableHeaders(); 

     var NotSearched = document.getElementById("no-search-default"); 
     var TableContainer = document.getElementById("data-table-container"); 
     var NoSearchResults = document.getElementById("no-search-results"); 

     if(NotSearched.style.display !== 'none'){ 
      $(NotSearched).hide(); 
     } 
     if(data){ 
      if(TableContainer.style.display == 'none'){ 
       $(TableContainer).show(); 
      } 
      $(NoSearchResults).hide(); 
      $('#data-table-results').html(data); 

      $("input:checkbox:not(:checked)").each(function() { 
       var DataTableColumn = "table ." + $(this).attr("name"); 
       $(DataTableColumn).remove(); 
      }); 

      if (! $.fn.DataTable.isDataTable('#data-table')) { 
       $('#data-table').DataTable(); 
      } 
      else{ 

      } 
     } 
     else{ 
      if(NoSearchResults.style.display == 'none'){ 
       $(TableContainer).hide(); 
       $(NoSearchResults).show(); 
      } 
     } 
    } 
}) 
+0

如果要將數據轉儲到原始html表中,則需要使所有行無效並重新繪製。 DataTable不知道你正在改變底層HTML – Bindrid

+1

你總是可以銷燬和重建整個表 – Bindrid

回答

1

這應該無效並在已經退出時重繪表格。
(增加了「全休息」參數後,我發現這一點:https://datatables.net/reference/api/draw()

if ( $.fn.DataTable.isDataTable('#data-table')) { 
    $('#data-table').DataTable().rows().invalidate().draw('full-reset'); 
} 
else{ 
     $('#data-table').DataTable(); 
} 
+0

好吧,這似乎有固定的分頁,行計數選項,搜索也似乎很好。但排序似乎還沒有重新加載。儘管如此,非常感謝您的幫助!非常感激。 – TheTechnicalPaladin

+0

你可以隨時銷燬並重建每個ajax調用表 – Bindrid

+0

看看https://datatables.net/reference/option/destroy – Bindrid

1

你可以嘗試簡單地重新初始化數據表通過調用

$('#data-table').DataTable({ 
    destroy: true 
}); 

此選項將允許數據表摧毀以前實例是否存在,並初始化爲第一次。

+0

謝謝幫助:) – TheTechnicalPaladin