У меня есть моя таблица данных, которая выглядит так

<table id="list" class="display"  width="100%" >
    <thead>
        <tr>
            <th>Title</th>
            <th>Description</th>
            <th>delete</th>
        </tr>
    </thead>
</table>

И у меня есть функция js, которая вызывает данные с помощью ajax в эту таблицу, вот функция js ниже

$(document).ready(function() {
  $('#list').dataTable({
    "bProcessing": true,
    "serverSide": true,
    "ajax":{
          url :"list.php",
          type: "GET",
          error: function(){
            $("#post_list_processing").css("display","none");
          }
        },
        "columns": [
              { "data": "title" },
              { "data": "description" }
          ]
  });
});

В настоящее время этот ответ ajax возвращает данные с идентификатором продукта в формате json, как в приведенном ниже примере

данные: [{id: "12", title: "product1", description: "test",…},…] 0: {id: "12", title: "product1", description: "test",…}

То, что я пытаюсь сделать, это показать в столбце удаления ссылку со ссылкой на удаление, которую я должен передать идентификатор продукта через URL-адрес удаления, но я не могу понять, как обрабатывать идентификатор ответа и отображать кнопка для функции удаления в таблице данных, не могли бы вы мне помочь? заранее спасибо

< Сильный > UPDATE :

List.php

$params = $columns = $totalRecords = $data = array();

    $params = $_REQUEST;

    $columns = array(
        0 => 'title',
        1 => 'description'
    );

    $where_condition = $sqlTot = $sqlRec = "";

    if( !empty($params['search']['value']) ) {
        $where_condition .= " WHERE ";
        $where_condition .= " ( title LIKE '%".$params['search']['value']."%' ";    
        $where_condition .= " OR description LIKE '%".$params['search']['value']."%' )";
    }

    $sql_query = " SELECT * FROM products ";
    $sqlTot .= $sql_query;
    $sqlRec .= $sql_query;

    if(isset($where_condition) && $where_condition != '') {

        $sqlTot .= $where_condition;
        $sqlRec .= $where_condition;
    }

    $sqlRec .=  " ORDER BY ". $columns[$params['order'][0]['column']]."   ".$params['order'][0]['dir']."  LIMIT ".$params['start']." ,".$params['length']." ";


    try{
        $db = new db();
        $db = $db->connect();
        $queryTot = $db->query($sqlTot);

        $totalRecords = $queryTot->rowCount();

        $queryRecords = $db->query($sqlRec);

        while( $row = $queryRecords->fetch(PDO::FETCH_ASSOC) ) { 
        $data[] = $row;
        }   

        $json_data = array(
            "draw"            => intval( $params['draw'] ),   
            "recordsTotal"    => intval( $totalRecords ),  
            "recordsFiltered" => intval($totalRecords),
            "data"            => $data
        );

        $db = null;
        if(empty($json_data)) {
            $response->getBody()->write($error);
        } else {
            $response->getBody()->write(json_encode($json_data));
        }
    } catch(PDOException $e) {
        $response->getBody()->write($errormsg);
    }
0
mirvat k 24 Сен 2018 в 01:35

2 ответа

Лучший ответ

Я думаю, ты хочешь чего-то подобного

О создании столбцов

Пример JSFiddle

<table id="example" class="display" style="width:100%">
  <thead>
    <tr>
      <th>Title</th>
      <th>Desc</th>
      <th>Delete</th>
    </tr>
  </thead>
  <tfoot>
    <tr>
      <th>Title</th>
      <th>Desc</th>
      <th>Delete</th>
    </tr>
  </tfoot>
</table>

`

$(document).ready(function() {
  var table = $('#example').DataTable({
    "data": [

      {
        "title": "Hey",
        "description": "hoy",
        "id": 1
      },

      {
        "title": "Hey",
        "description": "hoy",
        "id": 2
      },
      {
        "title": "Hey",
        "description": "hoy",
        "id": 3
      }
    ],
    "columns": [{
      "data": "title"
    },
                {
                  "data": "description"
                },
                {
                  "data": function(item) {
                    return '<a href="/delete/' + item.id + '">Delete</a>';
                  }
                }
               ]
  });

  $('#example tbody').on('click', 'a', function() {
    var data = table.row($(this).parents('tr')).data();
    alert(data[0] + "'s salary is: " + data[5]);
  });
});
0
KusokBanana 23 Сен 2018 в 23:09

Вы можете создать ссылку для удаления в list.php или при обработке ответа ajax.

В клиентском методе вам нужно будет использовать метод "dataSrc "для изменения ответа ajax перед использованием:

$(document).ready(function() {
  $('#list').dataTable({
    "bProcessing": true,
    "serverSide": true,
    "ajax":{
          "url" :"list.php",
          "type": "GET",
          "error": function(){$("#post_list_processing").css("display","none");},
          "dataSrc": function (json) {
              var return_data = new Array();
              for(var i=0;i< json.length; i++){
                return_data.push({
                  'title': json[i].title,
                  'description' : json[i].description,
                  'deleteLink' : '<a href="delete.php?id' + json[i].id +'">delete</a>"
                })
              }
              return return_data;
            }
          },
        "columns": [
              { "data": "title" },
              { "data": "description" },
              { "data": "deleteLink" }
          ]
  });
});

В серверном методе вы можете сгенерировать HTML-ссылку на удаление, используя конкатенацию PHP (+) для тегов ID и html, и вставить ссылку на удаление как один раз в качестве нового элемента ответа JSON. Таким образом, вам не потребуется dataSrc на ajax для изменения response data .

0
Ali Sheikhpour 23 Сен 2018 в 23:11