【问题标题】:jquery datatable Manipulate data after ajax calljquery datatable 在ajax调用后操作数据
【发布时间】:2020-08-13 09:06:05
【问题描述】:

我有这个获取数据的 ajax 函数:

function fetch_data() {
                $.ajax({
                    url: "{{ route('apply.app_table', $fertiluser[0]->id) }}",
                    headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                    method: 'GET',
                    dataType: 'json',
                    success: function(data){
                        const result = data['data'];
                        var html = '';
                        for (let i = 0; i < result.length; i++) {
                            const element = result[i];
                            html += '<tr id="' + result[i].id + '">';
                            html += '<td>' + result[i].type + '</td>';
                            html += '<td>' + result[i].description + '</td>';
                            html += '<td id="kgha_' + result[i].id + '" class="reviewer" style="background-color: #DF9881" contenteditable>' + result[i].kg_ha + '</td>';
                            html += '<td>' + result[i].land_delivery + '</td>';
                            html += '<td>' + result[i].SG + '</td>';
                            html += '<td>' + result[i].delivery_ha + '</td>';
                            html += '<td>' + result[i].N + '</td>';
                            html += '<td>' + result[i].P + '</td>';
                            html += '<td>' + result[i].K + '</td>';
                            html += '<td>' + result[i].Ca + '</td>';
                            html += '<td>' + result[i].Mg + '</td>';
                            html += '<td>' + result[i].S + '</td>';
                            html += '<td>' + result[i].Zn + '</td>';
                            html += '<td>' + result[i].B + '</td>';
                            html += '<td>' + result[i].Cu + '</td>';
                            html += '<td>' + result[i].Fe + '</td>';
                            html += '<td>' + result[i].Mn + '</td>';
                            html += '<td>' + result[i].Mo + '</td>';
                            html += '<td>' + result[i].depot + '</td>';
                            html += '<td>' + result[i].delivery_price + '</td>';
                            html += '<td>' + result[i].price_per_ha + '</td>';
                            html += '<td>' + result[i].price_per_land + '</td>';
                            html += '<td>' + result[i].withdraw_prod + '</td>';
                            html += '<td>' + '<a href="admin/fertil/apply/"' + result[i].id + '"/editapp">Wysig</a>' + '</td>';
                            html += '<td>' + '<button type="button" class="btn btn-info btn-sm apply_update"><i class="fa fa-floppy-o" aria-hidden="true"> Opdateer</i></button>';
                            html += '</tr>'
                        }
                        $('#fertil-app-table tbody').html(html);
                    }
});

然后我用$('#fertil-app-table').DataTable() 初始化一个jquery 数据表。 以这种方式使用时,columnDefs 等内置方法的数据表不起作用。

如何将ajax和jquery datatables从服务器接收到的数据结合起来操作?

【问题讨论】:

    标签: javascript jquery ajax datatables


    【解决方案1】:

    好的,所以我找到了一种结合 ajax 并使用 rowCallback 方法呈现 jquery 数据表的方法。即:

    $(function() {
        $('#fertil-app-table').DataTable({
            processing: true,
            serverSide: true,
            ajax: "{{ route('admin.fertil.apply.app_table', $fertiluser[0]->id) }}",
            fnDrawCallback: calcTableColumns,
            columns: [
                {data: 'type', name: 'type'},
                {data: 'description', name: 'description'},
                {data: 'kg_ha', name: 'kg_ha'},
                {data: 'land_delivery', name: 'land_delivery'},
                {data: 'SG', name: 'SG'},
                {data: 'delivery_ha', name: 'delivery_ha'},
                {data: 'N', name: 'N'},
                {data: 'P', name: 'P'},
                {data: 'K', name: 'K'},
                {data: 'Ca', name: 'Ca'},
                {data: 'Mg', name: 'Mg'},
                {data: 'S', name: 'S'},
                {data: 'Zn', name: 'Zn'},
                {data: 'B', name: 'B'},
                {data: 'Cu', name: 'Cu'},
                {data: 'Fe', name: 'Fe'},
                {data: 'Mn', name: 'Mn'},
                {data: 'Mo', name: 'Mo'},
                {data: 'depot', name: 'depot'},
                {data: 'delivery_price', name: 'delivery_price'},
                {data: 'price_per_ha', name: 'price_per_ha'},
                {data: 'price_per_land', name: 'price_per_land'},
                {data: 'withdraw_prod', name: 'withdraw_prod'},
                {data: 'amend', name: 'amend', orderable: false, searchable: false},
                {data: 'but', name: 'but', orderable: false, searchable: false}
            ],
            rowCallback: function(row, data, index){  //use the callback to add custom properties and attributes with their respective values
                $('td:eq(0)', row).attr('id', data['id']);
                $('td:eq(2)', row).attr('id', 'kgha_' + data['id']);
                $('td:eq(2)', row).attr('className', 'reviewer');
                $('td:eq(2)', row).prop('contenteditable', true);
                if(data["tid"] == 8){
                    $('td', row).css('background-color', '#28a745');
                    $('td', row).css('color', 'white');
                }
            }
        });
    });
    

    通过回调,您可以操作表格。 我的问题实际上应该是How do I add custom properties and attributes to td elements using jquery datatables?

    【讨论】:

    • 对不起,我的意思是属性。起初我没有使用 jQuery DataTable ajax 方法。我不知道如何向 td 元素添加 contenteditable 属性。但正如您从我的回答中看到的那样,我设法通过使用rowCallback 方法来解决这个问题。我将数据表对象属性称为方法。这可能是一个功能。这是调用类函数方法的习惯。但我一直忘记 javascript 是无类的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2010-12-28
    • 2021-09-29
    • 2010-12-01
    • 2014-01-24
    相关资源
    最近更新 更多