Jatery Datatables возвращает дополнительную информацию с сервера - PullRequest
16 голосов
/ 22 мая 2011

с использованием JQuery Datatables и все идет хорошо.

Я разработал способ отправки дополнительной информации от клиента на сервер.Теперь я хочу вернуться в другую сторону.

Итак, как мне отправить дополнительную информацию с сервера клиенту.Я бы подумал, что мог бы добавить дополнительную запись в возвращенный JSON и вытащить ее куда-нибудь.Один пункт, который я, возможно, хотел бы отослать назад, - сколько времени сервер потратил на обработку ответа.Затем я могу показать эту информацию пользователю.

Любая помощь будет принята с благодарностью.Спасибо

Ответы [ 6 ]

16 голосов
/ 23 мая 2011

Я думаю, вы поняли все правильно.Вам просто нужно присоединить дополнительную сторону сервера данных в объекте JSON, а затем получить его в «fnServerData».Вы можете добавить этот код в объект инициализации:

        "fnServerData": function ( sSource, aoData, fnCallback ) {
            $.getJSON( sSource, aoData, function (json) {
//Here you can do whatever you want with the additional data
                console.dir(json);
//Call the standard callback to redraw the table
                fnCallback(json);
            } );
        }

На стороне сервера вы можете добавить столько параметров, сколько захотите: Обычно у вас есть json с 3 параметрами "iTotalRecords" (общее количество строк), "iTotalDisplayRecords "(отфильтрованная сумма, если вы используете фильтры) и aaData (ассоциативный массив со строками).Если вы добавите, например, «iProcessingTime» (время, необходимое для обработки на стороне сервера), вы можете сделать:

        "fnServerData": function ( sSource, aoData, fnCallback ) {
            $.getJSON( sSource, aoData, function (json) {
//take the processing time and put it in a div
                $('#processingTime').html(json.iProcessingTime);
//pass the data to the standard callback and draw the table
                fnCallback(json);
            } );
        }

Это то, что вам нужно?

4 голосов
/ 12 марта 2013

Можно также получить доступ к информации из файла JSON с помощью функции "fnInitComplete", которая вызывается после завершения события рисования таблицы (включая данные).

  $('#example').dataTable( {
    "fnInitComplete": function(oSettings, json) {
      //Do something with json variable
    }
  });
2 голосов
/ 09 июня 2017
"fnDrawCallback": function( oSettings ) {
    console.log(oSettings.json);//do whatever with your custom response
  },
2 голосов
/ 18 июля 2011

@ Никола Пелучетти ответ правильный.Но если вы следуете этому примеру http://datatables.net/release-datatables/examples/server_side/post.html и не (по какой-то причине) не хотите использовать getJSON, это тоже работает

        "fnServerData": function ( sSource, aoData, fnCallback ) {
            $.ajax({
                "dataType": 'json',
                "type": "POST",
                "url": sSource,
                "data": aoData,
                "success": function(json){
                    $('#processingTime').html(json.iProcessingTime); // iProcessingTime is the variable that we added in JSON at the server side
                    fnCallback(json);
                }
            });               
        }
1 голос
/ 04 октября 2014

Вышеуказанные предложения не помогли.

У меня есть серверная страничная реализация ajax.Когда пользователь вводит новые поисковые слова, он должен обновляться, поэтому использование «fnInitComplete» не является опцией, поскольку он запускается только один раз, когда объект DataTable инициализируется.

Переопределение fnServerData также не работает.

Таким образом, вместо этого я закончил реализацию, получив iProcessingTime из JSON через dataSrc:

var table = $('#pkgTable').DataTable({
    "processing" : true,
      "serverSide" : true,
      "sPaginationType" : "jPaginator",
      "ajax": {
          "url" : urlStr,
          "type" : "POST",
          "dataSrc": function(json) {
            var iProcessingTimeMS = json.iProcessingTime;
            var iProcessingTimeS = iProcessingTimeMS/1000;
            $("#processingTime").html("Search Time: " + iProcessingTimeMS + " ms. " + iProcessingTimeS + " s.");
          return json.aaData;
        }
      },
      "oLanguage": {
            "sProcessing":   "<span style='color: red; font-weight: bold'>Please Wait...</span>",
            "sZeroRecords":  "No Records Found...",
            "sSearch":       "Search All:",
            "sUrl":          "",
            "oPaginate": {
                             "sFirst"    : "<b>&lt;&lt;</b>",
                             "sLast"     : "<b>&gt;&gt;</b>",
                             "sPrevious" : "<b>&lt;</b>",
                             "sNext"     : "<b>&gt;</b>"
                    },
            "sLengthMenu": 'Display <select>' +
                    '<option value="10">10</option>' +
                    '<option value="20">20</option>' +
                    '<option value="50">50</option>' +
                    '<option value="100">100</option>' +
                    '</select> records'
        }
});
0 голосов
/ 16 февраля 2016
<div id="category"></div>

$('#example').dataTable( {
    "fnInitComplete": function(oSettings, json) {
      $('#category').html(json.category);
    }
  });

Мне кажется, это нормально работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...