buttons.exportData using array result

buttons.exportData using array result

kjdion84kjdion84 Posts: 9Questions: 3Answers: 0

I'm trying to get my table to export using the result of an AJAX request to my server.

Here is the code I am using:

jQuery.fn.DataTable.Api.register( 'buttons.exportData()', function ( options ) {
    if ( this.context.length ) {
        var jsonResult = $.ajax({
            url: 'http://leadbind.dev/backend/leads/datatable',
            //data: {search: $('#search').val()},
        success: function (result) {
            //Do nothing
        },
        async: false
    });

        console.log(jsonResult.responseJSON.data);

        return {body: jsonResult.responseJSON.data, header: $("#leads_datatable thead tr th").map(function() { return this.innerHTML; }).get()};
    }
} );

When I click the export button, I see this result for the request:

{draw: 0, recordsTotal: 9, recordsFiltered: 9,…}
data
:
[{id: "1", segment_id: "1", source_id: "1", source_cost: "55.00",…},…]
draw
:
0
input
:
[]
queries
:
[,…]
recordsFiltered
:
9
recordsTotal
:
9

The console.log result for jsonResult.responseJSON.data is:

Array(9)
0
:
{id: "1", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
1
:
{id: "2", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
2
:
{id: "3", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
3
:
{id: "4", segment_id: "1", source_id: "2", source_cost: "0.00", data: {…}, …}
4
:
{id: "5", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
5
:
{id: "6", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
6
:
{id: "7", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
7
:
{id: "8", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
8
:
{id: "9", segment_id: "1", source_id: "1", source_cost: "55.00", data: {…}, …}
length
:
9
__proto__
:
Array(0)

It creates the excel file but there are no rows in it, only headings. How do I fix this?

Answers

  • allanallan Posts: 63,552Questions: 1Answers: 10,477 Site admin
    edited November 2019

    It looks like you are replacing Buttons' built in buttons.exportData(). Its a clever idea to have it do what you are looking for, but you need to have your custom implementation return the same JSON data structure as the built in buttons.exportData(). That is the structure that anything is using that method will be expecting.

    Allan

  • sulemanjohnsulemanjohn Posts: 3Questions: 1Answers: 0

    https://datatables.net/forums/discussion/49133

    and look for @SGConger Comments at the bottom of the page

This discussion has been closed.