How to submit form data along with jQuery DataTables data in server side processing mode

I am trying to submit form data with no success and the data cannot be loaded.

How can I pass all form data using an array and one textbox, combobox, etc. on fnServerdata

?

table_obj = $('#group-table').dataTable({
   "sAjaxSource": "URL Goes here",
   fnServerData: function(sSource, aoData, fnCallback,oSettings) {
      oSettings.jqXHR = $.ajax( {
         "dataType": 'json',
         "type": "POST",
         "url": sSource+'?'+$.param(aoData),
         "data": $("#frm").serializeArray(),
         "success": fnCallback
      } );
   },
   aaSorting: [[ 1, "desc" ]],
   bProcessing: true,
   bServerSide: true,
   processing : true,
   columnDefs: [{
        'targets': 0,
        'searchable':false,
        'orderable':false,
        'className': 'dt-body-center',
        'render': function (data, type, full, meta){
            return '<label><input type="checkbox" name="user_id[]" value="' + $('<div/>').text(data).html() + '"></label>';
        }
     }],
   rowCallback: function(row, data, dataIndex){
       // If row ID is in list of selected row IDs
       if($.inArray(data[0], rows_selected) !== -1){
          $(row).find('input[type="checkbox"]').prop('checked', true);
          $(row).addClass('selected');
       }
   },
   iDisplayLength: '50',
});

      

+4


source to share


3 answers


SOLUTION 1

Replace this:

$('#group-table').dataTable({
   "sAjaxSource": "URL Goes here",
   fnServerData: function(sSource, aoData, fnCallback,oSettings) {
      oSettings.jqXHR = $.ajax( {
         "dataType": 'json',
         "type": "POST",
         "url": sSource+'?'+$.param(aoData),
         "data": $("#frm").serializeArray(),
         "success": fnCallback
      } );
   },

      

from:

$('#group-table').dataTable({
   "ajax": {
      "url": "URL Goes here",
      "type": "POST",
      "data": function(d){
         d.form = $("#frm").serializeArray();
      }
   },

      

Your form data will be in the parameter form

as an array of objects with parameters name

and value

, below is the JSON representation:

"form": [{"name":"param1","value":"val1"},{"name":"param2","value":"val2"}]

      




SOLUTION 2

If you want to have form data as name / value pairs, see this jsFiddle for an example of an alternative solution.


NOTES

There are checkboxes in the data table. The solution above will not work for form elements in the data table as the DataTable removes invisible nodes from the DOM.

+3


source


If you want to format the data POST

, you can also format the form data using a function jquery .each()

. Let me use the answer above using solution # 1 but with jquery .each()

to format the data.

$('table').DataTable({
  "ajax": {
     "url": "URL HERE",
     "type": "POST",
     "data": function(d) {
       var frm_data = $('form').serializeArray();
       $.each(frm_data, function(key, val) {
         d[val.name] = val.value;
       });
     }
  }
});

      



Then you can just access this in PHP, for example:

var $data = $_POST['name'];

      

+14


source


How about this?

$('#group-table').DataTable( {
          "processing": true,
          "serverSide": true,
          "bDestroy": true,
          "bJQueryUI": true,
          "ajax": {
              "url": "url here",
              "type": "POST",
              "data": {
                   store: $('#store').val(),
                   month: $('#m').val(),
                   year: $('#y').val(),
                   status: $('#status').val(),
                },
          }
    } );

      

then you can access the above sample data through PHP using that.

$_POST['store']
$_POST['month']
$_POST['year']
$_POST['status]

      

Hope this helps.

0


source







All Articles