javascript - DataTables hämta arraydata för celler i endast valda rader


Med hjälp av select-pluginen försöker jag få data från de valda raderna med rows().data(), men datan den hämtar är mycket mer än en array av celldata. Jag vill skicka den datan i en Ajax POST-förfrågan, men jag får ett 413-fel som säger "request entity too large".

https://datatables.net/reference/api/rows().data()

var dataTable = $('#products').DataTable( {
  "processing": true,
  "ajax": "/products",
  "columns": [
    {
      "className": 'select-checkbox',
      "defaultContent": '<span style="display:none;">0</span>',
      "orderDataType": "dom-text",
      type: 'string'
    },
    {
      "data": "sku",
      "className": 'sku-value',
      "defaultContent": ""
    },
    {
      "data": "name",
      "className": 'name-value',
      "defaultContent": ""
    },
    {
      "data": "our_price",
      "className": 'our-price-value price',
      "defaultContent": 0
    },
    {
      "data": "sale_price",
      "className": 'sale-price-value price',
      "defaultContent": 0
    },
    {
      "data": "rrp_price",
      "className": 'rrp-price-value price',
      "defaultContent": 0
    },
    {
      "data": "similar_price",
      "className": 'similar-price-value price',
      "defaultContent": 0
    },
    {
      "data": "stores.one.store",
      "className": 'store-one store',
      "defaultContent": ""
    },
    {
      "data": "stores.two.store",
      "className": 'store-two store',
      "defaultContent": ""
    },
    {
      "data": "stores.three.store",
      "className": 'store-three store',
      "defaultContent": ""
    },
    {
      "data": "end_date",
      "className": 'end-date-value date',
      "defaultContent": ""
    },
    {
      "data": "updated_at",
      "className": 'updated-at-value date',
      "defaultContent": ""
     }
  ],
  "select": {
    "style":    'multi',
    "selector": 'td:first-child'
  },
});

var rowData = dataTable.rows( { selected: true } ).data();

Men från 3 rader valda med 5 celler med några väldigt små värden fryser Chrome dev-verktygen när det försöker ladda allt, eftersom det på något sätt också innehåller alla 2200 rader i tabellen. :/

Min kod är hämtad härifrån: https://datatables.net/extensions/select/examples/api/get.html

I objektet där rowData finns finns en array blandad med en massa andra funktioner, arrayen har all data jag behöver, men jag kan inte separera den från allt annat.

Datan i rowData:

Jag vill bara ha de första 3 raderna, arrayen.

Att gå vidare till:

$.post('/generate', rowData, function() {
    console.log('done');
});

Svar #1

API-metoden rows().data() returnerar ett array-liknande objekt som också är en DataTables API-instans.

Använd toArray()-API-metoden för att konvertera API-instansen till ett inbyggt JavaScript-arrayobjekt.

var rowData = dataTable.rows( { selected: true } ).data().toArray();