我正在尝试执行此示例https://datatables.net/blog/2017-03-31,除了ajax请求之外,其他所有功能都可以正常工作,问题是我正在尝试从数据库返回数据,而几乎不知道如何使用ajax(新手)来做到这一点。我的代码和ajax请求看起来:
var id = 0;
$('#tablanormal tbody').on('click', 'td.details-control', function () {
var tr = $(this).closest('tr');
var tdi = tr.find("i.fa");
var row = table.row(tr);
id = 0;
id = parseInt(table.row(this).data().id_sol);
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
tdi.first().removeClass('fa-minus-square');
tdi.first().addClass('fa-plus-square');
} else {
// Open this row
row.child(format(row.data())).show();
tr.addClass('shown');
tdi.first().removeClass('fa-plus-square');
tdi.first().addClass('fa-minus-square');
}
});
table.on("user-select", function (e, dt, type, cell, originalEvent) {
if ($(cell.node()).hasClass("details-control")) {
e.preventDefault();
}
});
});
function format(rowData) {
var div = $('<div/>')
.addClass('loading')
.text('Loading...');
$.ajax({
method: 'POST',
url: 'datatables_ajax/items.php',
data: {idsol: id},
dataType: 'json',
success: function (json) {
div
.html(json.html)
.removeClass('loading');
},
error: function (er) {
console.error(error)
}
});
return div;
}
item.php文件
<?php
include_once '../datatables_ajax/conexion.php';
$objeto = new Conexion();
$conexion = $objeto->Conectar();
$idsol = $_POST['idsol'];
$consulta = "CALL Items('".$idsol."')";
$resultado = $conexion->prepare($consulta);
$resultado->execute();
$data=$resultado->fetchAll(PDO::FETCH_ASSOC);
//print json_encode($data, JSON_UNESCAPED_UNICODE);
echo '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;"><tbody>';
foreach(['ID','item','number'] as $attribute) {
echo '<tr><th>'.$attribute.'</th>';
foreach($data as $row) {
echo '<td>'.$row[$attribute].'</td>';
}
echo '</tr>';
}
echo '</tbody></table>';
$conexion=null;
?>
items.php返回id_sol,item_name,item_number,我想先以文本形式返回它(如果您仅打开文件,则可以使用),但是当试图显示该表时,它只是停留在“正在加载...”中,因此如果有人帮助我将这些数据作为表格返回,将很有帮助。
第一
[ajax调用完成后,在complete: function(){}
内而不是success: function(){}
内,应删除加载文本。
第二
您可以像这样从PHP将数据作为表返回:
if ($resultado->rowCount()){ //meaning if the request returned some data
$data=$resultado->fetchAll(PDO::FETCH_ASSOC);
$d = [];
$i = ;
foreach($data as $val){
$d[i]['fieldName'] = $val['columnName'];
}
echo json_encode($data);
}else{ //no data returned
//error handling here
}
第三
如果要以HTML表形式返回数据,请执行以下操作:
if ($resultado->rowCount()){ //meaning if the request returned some data
$data=$resultado->fetchAll(PDO::FETCH_ASSOC);
$output = "
<table>
<thead>
<tr>
<th>first header </th>
<th>second header </th>
</tr>
</thead>
<body>
";
$d = [];
$i = ;
foreach($data as $val){
$output .="
<tr>
<td>first header data=".$val[columnName]."</td>
<td>second header data=".$val[columnName]."</td>
</tr>";
$d[i]['fieldName'] = $val['columnName'];
}
$output .=" </tbody>
</table>";
echo json_encode($output);
}else{ //no data returned
//error handling here
}