Lyndon
Lyndon

Reputation: 301

How do i use a variable in the columns section of an ajax request for data tables

I'm trying to add dynamic values for the column section in an ajax request so that the users can have control over what fields are in the data tables.

I tried with default values and it worked but when i changed to use dynamic values from a variable, the ajax field gives me errors

this works fine;

$(function() {
            $('#myTable').DataTable({
                processing: true,
                serverSide: true,
                ajax: '{{ route('members.create') }}',
                columns: [
                    { data: 'name', name: 'name' },
                    { data: 'email', name: 'email' },
                    { data: 'address', name: 'address' },
                    { data: 'contact', name: 'contact' },
                    { data: 'nationality', name: 'nationality' },
                    { data: 'dob', name: 'dob' },
                    { data: 'hometown', name: 'hometown' },
                    { data: 'action', name: 'action', orderable: false, searchable: false }
                ]
            });
        });

this is where the problem comes in;

$(function() {
            $('#myTable').DataTable({
                processing: true,
                serverSide: true,
                ajax: '{{ route('members.create') }}',
                columns: [
                    var memberFields = <?php echo json_encode($chosen_member_fields, JSON_UNESCAPED_UNICODE); ?>;
                    for(var i = 0; i < memberFields.length; i++){
                        { data: memberFields[i], name: memberFields[i] };
                    },
                    { data: 'action', name: 'action', orderable: false, searchable: false }
                ]
            });
        });

Upvotes: -1

Views: 524

Answers (1)

Royal_MGH
Royal_MGH

Reputation: 804

Thats because column property wants an array . And your structure to build array is incorrect .
Do this :

$(function() {

    var memberFields = <?php echo json_encode($chosen_member_fields, JSON_UNESCAPED_UNICODE); ?>;
    var columnArray = [];//To save for value into an Array
    for(var i = 0; i < memberFields.length; i++){
        columnArray.push({ data: memberFields[i], name: memberFields[i] });//push valuse to array
    },
    columnArray.push({ data: 'action', name: 'action', orderable: false, searchable: false });//push last value

    $('#myTable').DataTable({
                processing: true,
                serverSide: true,
                ajax: '{{ route('members.create') }}',
                columns: columnArray ,  //just say Array name !
    });

});

Didnt test but hope works

Upvotes: 1

Related Questions