2016-11-21 3 views
0

У меня есть JQuery DataTableЯ не могу перезагрузить JQuery DataTable Аякса

function loadTable() { 
     var table = $('#example').DataTable({ 
      "processing": true, 
      "serverSide": true, 
      "searching": false, 
      "bLengthChange": false, 
      "ajax": { 
       "url": "/updateWithParams", 
       "type": "POST", 
       "data": function (d) { 
        return $('#formFilter').serializeArray(); 
       } 
      }, 
............ 
} 

и назвать его

$(document).ready(function() { 
     loadTable(); 
    }); 

Но после загрузки я могу назвать этот метод на кнопку (изменение формы гату и перезагрузить таблицу), но Я получаю ошибку - не могу реанимировать dataTable ..... Как я могу перезагрузить datatable?

Edit:

$(document).ready(function() { 
//  connect(); 
     setDatesFilters(); 
     loadTable(); 
    }); 

    function setDatesFilters() { 
     var day = start.getDate(); 
     var month = start.getMonth() + 1; 
     var year = start.getFullYear(); 
     var str = day + '.' + month + '.' + year; 
     $('#startDateFilter').val(str.concat(" 00:00")); 
     $('#endDateFilter').val(str.concat(" 23:59")); 
    } 
    var table; 
    function reload() { 
     table.ajax.reload(); 
    } 
    function loadTable() { 
     table = $('#example').DataTable({ 
      "processing": true, 
      "serverSide": true, 
      "searching": false, 
      "bLengthChange": false, 
      "ajax": { 
       "url": "/updateWithParams", 
       "type": "POST", 
       "data": function (d) { 
        return $('#formFilter').serializeArray(); 
       } 
      }, 
      "columns": [ 
       {"data": "id"}, 
       {"data": "name"}, 
       { 
        "targets": -1, 
        "data": "status", 
        "render": function (data, type, full) { 
         if (data == 0) return "<p> Новая </p>"; 
         if (data == 1 || data == 2) return "<p> Выполняется </p>"; 
         if (data == 3) return "<p> Выполнено </p>"; 
         if (data == 4) return "<p> Отменено </p>"; 
        } 
       }, 
       { 
        "data": "dateCreated", 
        "render": function (data) { 
         var dateStart = new Date(data); 
         var day = dateStart.getDate(); 
         var month = dateStart.getMonth() + 1; 
         var year = dateStart.getFullYear(); 
         return day + '.' + month + '.' + year; 
        } 
       }, 
       {"data": "userName"}, 
       { 
        "targets": -1, 
        "data": null, 
        "render": function (data, type, full) { 
         if (data.status == '0') { 
          return "<button type='button' class='btn btn-info'>Запустить</button>"; 
         } 
         if (data.status == '1' || data.status == '2') { 
          return "<button type='button' class='btn btn-primary'>Остановить</button>"; 
         } 
         if (data.status == '3') { 
          return "<button type='button' class='btn btn-info'>Скачать</button>"; 
         } 
         if (data.status == '4') { 
          return "<button type='button' class='btn btn-warning'>Отменено</button>"; 
         } 
        } 
       } 
      ] 
     }); 
     $('#example tbody').on('click', 'td', function() { 
      var id = table.cell(this).data().id; 
      var status = table.cell(this).data().status; 
      console.log("id: " + id + " status: " + status); 
      if (status == '0') startResolution(id); 
      if (status == '1' || status == '2') stopResolution(id); 
      if (status == '3') downloadResolution(id); 
     }); 
    } 
+0

Почему вы хотите перезагрузить данные? –

+1

https://datatables.net/reference/api/ajax.reload() – Mackan

+0

try '$ ('# example'). DataTable(). Api(). Ajax.reload();' или '$ ('# пример '). DataTable(). ajax.reload(); ' –

ответ

0

Если данные на стороне сервера была обновлена, и вы хотите, чтобы вручную обновить в переднем конце:

ajax.reload()

In an environment where the data shown in the table can be updated at the server-side, it is often useful to be able to reload the table, showing the latest data. This method provides exactly that ability, making an Ajax request to the already defined URL (use ajax.url() if you need to alter the URL).

The fnReloadAjax плагин также работает так же, но устаревает с таблицами данных 1.10 и выше.

т.е.

var table = null; 

function loadTable() { 
    table = $('#example').DataTable({ 
     "processing": true, 
     "serverSide": true, 
     "searching": false, 
     "bLengthChange": false, 
     "ajax": { 
      "url": "/updateWithParams", 
      "type": "POST", 
      "data": function (d) { 
       return $('#formFilter').serializeArray(); 
      } 
     }, 
............ 
} 

function reloadTable(){ 
    table.ajax.reload(); 
    // or 
    // table.ajax.reload(null, false); // user paging is not reset on reload 
} 
+0

Я хочу пройти форму. Я меняю данные фильтра формы и нажимаю кнопку show, где я вызываю этот метод - перезагружаю таблицу новыми данными – user5620472

+0

Я добавляю функцию reload() { table.ajax.reload(); }, но таблица не обновляется на стороне клиента – user5620472

+0

Я обновил свой ответ. Удостоверьтесь, что 'table' является ссылкой на datatable. –

0

Вы можете сделать это, чтобы обновить таблицу данных после применения фильтров поиска:

$('#example').DataTable().draw(); 

Также вызов этого метода я считаю, перезагружает текущую страницу, даже если нет фильтров поиска были изменены.

+0

Это не помогло. ajax call controller mrthod и метод возврата метода контроллера, но на стороне клиента не обновляется – user5620472

+0

Просто выбросьте это. Были ли данные возвращены не так, как отображаемые в данный момент данные? Просто пытаюсь исключить легкий материал. – Adrian

+0

Я тебя не совсем понимаю.извините за мой английский) – user5620472

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