javascript - DataTables seçili satırların hücrelerinin yalnızca dizi verilerini alma


Select eklentisini kullanarak, seçilen satırlardan rows().data() ile veri almaya çalışıyorum ama çektiği veri, hücre verisi dizisinden çok daha fazla. Bu veriyi bir Ajax POST isteğinde göndermek istiyorum ama "request entity too large" diyerek 413 hatası alıyorum.

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();

Ama 3 satırdan seçilen ve bazı çok küçük değerler içeren 5 hücreden, Chrome geliştirici araçları hepsini yüklemeye çalışırken donuyor, çünkü bir şekilde o değer tablodaki tüm 2200 satırı da içeriyor. :/

Kodum buradan alınmıştır: https://datatables.net/extensions/select/examples/api/get.html

rowData'nın bulunduğu nesnede, diğer birçok fonksiyonla karışık bir dizi var, dizi ihtiyacım olan tüm verilere sahip, ama onu diğer her şeyden ayıramıyorum.

rowData içindeki veriler:

Sadece o ilk 3 satırı istiyorum, dizi.

Şuna geçmek:

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

Cevap #1

API metodu rows().data(), aynı zamanda bir DataTables API örneği olan Dizi-benzeri bir nesne döndürür.

toArray() API yöntemini kullanarak API örneğini yerel Javascript dizi nesnesine dönüştürün.

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