X-Редактируемый с помощью DataTable через JSON

#json #datatable #x-editable

#json #datatable #x-редактируемый

Вопрос:

пожалуйста, у меня есть HTML-таблица, в которую я хочу загрузить данные JSON через AJAX из базы данных, а также реализовать встроенное редактирование с использованием X-редактируемой библиотеки, но после загрузки я не могу редактировать ячейки напрямую

 <table id="curtable" data-toggle="table" data-pagination="true" data-search="true" data-show-columns="true" data-show-pagination-switch="true" data-show-refresh="true" data-key-events="true" data-show-toggle="true" data-resizable="true" data-cookie="true"
                                                                data-cookie-id-table="saveId" data-show-export="true" data-click-to-select="true" data-toolbar="#toolbar">
                                                                <thead>
                                                                    <tr>
                                                                        <th data-field="Description" data-editable="true">Description</th>
                                                                        <th data-field="ShortName" data-editable="true">Short Name</th>
                                                                        <th data-field="Symbol" data-editable="true">Symbol</th>
                                                                        <th data-field="Country" data-editable="true">Country</th>
                                                                        <th data-field="Active" >Active</th>
                                                                        <th data-field="isFuntional">Functional</th>
                                                                        <th data-field="ExRate" data-editable="true">Rate</th>
                                                                    </tr>
                                                                </thead>

                                                            </table>
  

Ниже приведен вызов AJAX, после вызова я не могу щелкнуть ни по одной ячейке для редактирования, но когда я ввожу данные вручную, используя теги tr и td, я могу редактировать ячейки

             $.ajax({
            url: 'RhemaServices.asmx/GetCurrencies',
            type: 'POST',
            dataType: 'json',
            contentType: "application/json; charset-utf-8",
            success: function (data) {
                datatableVariable = $('#curtable').DataTable({
                    data: data,
                    responsive: true,
                    columns: [
                        { 'data': 'Description' },
                        { 'data': 'ShortName' },
                        { 'data': 'Symbol' },
                        { 'data': 'Active' },
                        { 'data': 'isFuntional' },
                        { 'data': 'ExRate' }

                    ],

                    //,
                    columnDefs: [
                        {
                            "targets": 4,
                            render: function (data, type, row) {
                                if (data === true) { return "Yes" } else { return "No" }
                            }
                        },
                        {
                            "targets": 5,
                            render: function (data, type, row) {
                                if (data === true) { return "Yes" } else { return "No" }
                            }
                        }
                    ]

                });
            }

        });
  

Ответ №1:

Datatables имеет встроенную функциональность для обработки ajax https://datatables.net/reference/option/ajax

 datatableVariable = $('#curtable').DataTable({
  ajax: {
    url: 'RhemaServices.asmx/GetCurrencieso',
    type: "POST",
  },
  columns: [
    {
      data: 'Description',
    },
    {
      data: 'ShortName',
    },
    {
      data: 'Symbol',
    },
    {
      data: 'Active',
    },
    {
      data: 'isFuntional',
      render: function(data, type, row, meta){ 
        if(type === 'display'){ 
          data = '<a href="#" data-name="isFuntional" class="editable" data-type="text" data-pk="' row.ID '" data-url="ajax/ajax_url_here" data-title="Enter isFuntional">' data '</a>';
        }
        return data;
      }
    },
    {
      data: 'ExRate',
      render: function(data, type, row, meta){ 
        if(type === 'display'){ 
          data = '<a href="#" data-name="ExRate" class="editable" data-type="text" data-pk="' row.ID '" data-url="ajax/ajax_url_here" data-title="Enter ExRate">' data '</a>';
        }
        return data;
      }
    },
  ],
  fnDrawCallback: function( oSettings ) {
    $('.editable').editable({
      success: function(response, newValue) {
        if(response.status == 'error') return response.msg; //msg will be shown in editable form
      },
      error: function(response, newValue) {
        if(response.status === 500) {
          return 'Service unavailable. Please try later.';
        } else {
          return response.responseText;
        }
      }
    });
  }
});
  

Внутри вызова ajax вы захотите передать ассоциативный массив с данными json в ячейке с именем data

пример

 echo json_encode(array('status' => 'success', 'data' => $allSubmissions))