Как отправить данные формы вместе с данными jQuery DataTables в режиме обработки на стороне сервера

Я безуспешно пытаюсь опубликовать данные формы, и данные не могут быть загружены.

Как я могу передать все данные формы с массивом и одним текстовым полем, полем со списком и т. д. в 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',
});

person Vijay V.    schedule 18.07.2015    source источник
comment
Вы искали в Интернете, как получить данные формы в php и как отправлять запросы sql? если вы получаете ошибки, вы должны показать их.   -  person hoijui    schedule 18.07.2015
comment
да. я сделал это и получил правильный ответ, но я пытаюсь использовать ajax с данными, а затем получаю проблему   -  person Vijay V.    schedule 18.07.2015
comment
если вы получаете ошибки, вы должны показать их. что вы имеете в виду под получением проблемы?   -  person hoijui    schedule 18.07.2015
comment
Проблема в том, что... я не получил данные формы с данными json таблицы данных? оба данных нужно объединить..   -  person Vijay V.    schedule 18.07.2015


Ответы (3)


РЕШЕНИЕ 1

Замените это:

$('#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
      } );
   },

с:

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

Данные вашей формы будут в параметре form в виде массива объектов с параметрами name и value, ниже приведено представление JSON:

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

РЕШЕНИЕ 2

Если вы хотите иметь данные формы в виде пар имя/значение, см. это jsFiddle для примера альтернативного решения. .


ПРИМЕЧАНИЯ

В вашей таблице данных есть флажки. Решение выше не будет работать для элементов формы в таблице данных, поскольку DataTable удаляет невидимые узлы из DOM.

person Gyrocode.com    schedule 18.07.2015
comment
будет ли он сочетать параметр таблицы данных? - person Vijay V.; 18.07.2015
comment
@VijayV., да, с решением № 1, используя параметр data, вы создаете новый параметр form, который будет содержать данные формы. С решением № 2 он сочетается с данными DatTables, но по-другому. - person Gyrocode.com; 18.07.2015
comment
Плохо работает с MVC. - person Triynko; 30.03.2016

Если вы хотите отформатировать данные POST, вы также можете отформатировать данные формы, используя функцию jquery .each(). Позвольте мне использовать ответ выше, используя решение № 1, но с jquery .each() для форматирования данных.

$('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;
       });
     }
  }
});

Затем вы можете просто получить доступ к этому в PHP, например:

var $data = $_POST['name'];
person Val Cajes Luminarias    schedule 12.08.2016
comment
Большое спасибо. Это работает потрясающе и легко для понимания. Была опечатка. Только что отредактировал ваш ответ. - person Zohaib; 11.11.2016
comment
Отлично, за исключением того, что это не работает, когда у вас есть несколько значений для некоторых полей формы. Мне пришлось объединить с этим: jsfiddle.net/XW2Cm/1 и адаптировать ваш код следующим образом: var frm_data = $('form').serializeObject(); $.extend(d, frm_data); - person Fred Mauroy; 15.09.2017

Как насчет этого?

$('#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(),
                },
          }
    } );

затем вы можете получить доступ к приведенным выше образцам данных через PHP, используя это.

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

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

person curiosity    schedule 05.09.2019