Как я могу использовать ajax.reload с jQuery datatable

#javascript #jquery #datatables

#javascript #jquery #таблицы данных

Вопрос:

У меня есть требование создать форму поиска, которая будет вызывать веб-api и заполнять jQuery DataTable при нажатии кнопки. Я не хочу загружать форму до тех пор, пока не будет нажата кнопка, поэтому у меня есть отдельный обработчик кнопок для вызова моего метода post. Мне сказали, что я должен использовать ajax.reload() с этим на случай, если кому-то придется снова искать, чтобы сузить результаты, но у меня возникли некоторые проблемы с внедрением этого в мой код. Кто-нибудь может помочь мне с моим требованием? Мой код отлично работает как есть, но я хотел бы знать, можно ли это сделать более эффективно. Смотрите мой рабочий код ниже.

 <script>
    var dataTable;
    var resultsContainer = $('#ResultsContainer');

    $(document).ready(function() {
      dataTable = $('#SearchResultsTable').DataTable({
        "columns": [
          { "data": "clientId" },
          { "data": "lastName"   },
          { "data": "firstName"  }
        ],
        "language": {
          "zeroRecords": '@Resource.NoRecordsFound'
        },
        "searching": false,
        "lengthChange": false
      });
    });

    $('#SearchButton').click(function (e) {
      e.preventDefault();
      RequestData();
    });

    function RequestData() {
      $.post('@Url.Content("?handler=ClientSearch")', $('#ClientSearchForm').serialize(), function (data) {
        ProcessResponse(data);
      });
    }

    function ProcessResponse(data) {  
        dataTable.clear();
        dataTable.rows.add(data);
        dataTable.draw();
        resultsContainer.addClass('d-block');
    }

  </script>



  

Ответ №1:

Похоже ajax.reload , что метод DataTable требует URL-адреса для определения данных. В примере на https://datatables.net/reference/api/ajax.reload , они используют ajax опцию в объекте конфигурации для установки URL-адреса:

 var table = $('#example').DataTable( {
    ajax: "data.json"
} );
  

Затем вызовы table.ajax.reload() будут просто извлекать обновленные данные data.json снова. В вашем случае вы делаете POST для извлечения данных с помощью формы поиска. Итак, вам нужно либо:

Надеюсь, это поможет.