2017-01-19 4 views
1

Я добавил DataTables в таблицу, я получаю данные через AJAX, используя PHP и SQL. При первой загрузке после выполнения первого поиска все в порядке, и все работает по назначению. Однако при поиске во второй раз, когда весь код, используемый для поиска, снова запущен, функциональность DataTable, похоже, перестает работать.JQuery AJAX DataTable Не загружает стандартные функции после перезагрузки данных

Я добавил некоторые предупреждения в важные части файла DataTable и нашел после первого поиска, он никогда не возвращает его в файл.

Возможно, мне нужно «переинициализировать» DataTable, увидев, что после завершения поиска все содержимое данных изменилось.

Провел долгое время, глядя в интернет, с множеством предложений вокруг Destroy и Clear и т. Д. Но ничего не работает.

Вот мой код, как вы можете видеть, у меня есть это набор, чтобы сделать что-то другое после первого поиска, но не уверен, как это исправить, как сортировка, пагинацией, поиск и т.д. все не работают:

$.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

Это должно аннулировать и перерисовывать таблицу, когда она уже выходит.
(Добавлен параметр 'Full-Rest' после того, как я нашел это: 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

Вы можете попробовать просто повторно инициализировать DataTables по телефону

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

этот вариант позволит DataTables уничтожить предыдущий если он существует и инициализируется, как если бы это был первый раз.

+0

спасибо help :) – TheTechnicalPaladin

 Смежные вопросы

  • Нет связанных вопросов^_^