วิธีส่งข้อมูลแบบฟอร์มพร้อมกับข้อมูล 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
ใช่. ฉันทำไปแล้วและได้รับการตอบสนองอย่างเหมาะสม แต่ฉันลองใช้อาแจ็กซ์ที่สามารถบันทึกข้อมูลได้ จากนั้นก็พบปัญหา   -  person Vijay V.    schedule 18.07.2015
comment
หากคุณได้รับข้อผิดพลาด คุณควรแสดงข้อผิดพลาดเหล่านั้น คุณหมายถึงอะไรเกี่ยวกับการมีปัญหา?   -  person hoijui    schedule 18.07.2015
comment
ปัญหาคือว่า... ฉันไม่ได้รับข้อมูลแบบฟอร์มพร้อม data table json data ใช่ไหม ข้อมูลทั้งสองต้องรวมกัน ..   -  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(); $.ขยาย(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