обрабатывать ajax-ответ на кнопку отображения в datatables

94
17

У меня есть мой datatable, который выглядит так

<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, как в приведенном ниже примере

data: [{id: "12", title: "product1", описание: "test",...},...] 0: {id: "12", title: "product1", description: "test",...}

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

ОБНОВИТЬ:

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);
}

спросил(а) 2018-09-24T01:35:00+03:00 2 года назад
1
Решение
114

Поэтому я думаю, что вы хотите что-то подобное

О генерации столбцов

Пример 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] + " salary is: " + data[5]);
});
});

ответил(а) 2018-09-24T02:09:00+03:00 2 года назад
41

Вы можете генерировать ссылку Удалить на 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 и вставить ссылку delete как один раз в качестве нового элемента ответа JSON. Таким образом, вам не потребуется dataSrc для ajax для изменения данных ответа.

ответил(а) 2018-09-24T02:11:00+03:00 2 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема