У меня есть ситуация с таблицами данных, которые я не понимаю:
Проблема:
У меня этот rewriteRule:
Rewriterule ^table/ table.php
Итак, когда я перехожу на сайт www.site.com/table.php, все работает хорошо, но когда я перехожу на сайт www.site.com/table/, у меня есть следующее предупреждающее сообщение:
Предупреждение DataTables: table id = {tablet} - Недействительный ответ JSON. Для получения дополнительной информации об этой проблеме перейдите по адресу: http://datatables.net/tn/1
Я пошел к предлагаемому URL-адресу, но я не могу решить проблему.
Извините, но я не могу дать сайт онлайн, потому что это интранет.
Мой php-код:
$table = 'paciente';
$primaryKey = 'id';
$columns = array(
array(
'db' => 'id',
'dt' => 0),
array(
'db' => 'nombre',
'dt' => 1,
'formatter' => function( $d, $row ) {
$links='<a href="paciente/'.$row[0].'/0/">'.$row[1].'</a>';
return $links;
}),
array( 'db' => 'apellidos', 'dt' => 2 ),
array( 'db' => 'tel_mov', 'dt' => 3,
'formatter' => function( $d, $row ) {
$tels=$row[3];
return $tels;
}
),
array( 'db' => 'tel_casa', 'dt' => 4,
'formatter' => function( $d, $row ) {
$tels2=$row[4];
return $tels2;
}
),
array( 'db' => 'terapeuta', 'dt' => 5 ),
array(
'db' => 'id',
'dt' => 6,
'formatter' => function( $d, $row ) {
$links2='<a href="print-historia.php?height=655&width=800&id='.$row[0].'" class=" thickbox"><img src="ima/edit.png" /></a> | <a href="?borrar=total&id='.$row[0].'" onClick="return confirmSubmit()"><img src="ima/close.png" /></a>';
return $links2;
}),
);
require( 'libraries/ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
И javascript:
<script type="text/javascript" src="<?php echo $base; ?>js/datatables.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#tablet').DataTable({
"language": {
"url": "js/Spanish.json"},
"scrollY": "500px",
"scrollCollapse": true,
"pageLength": 25,
"processing": true,
"serverSide": true,
"ajax": "table-load.php",
"order": [[ 1, "asc" ]],
"aoColumns": [
{ "sTitle": "id","bVisible": false},
{ "sTitle": "Nombre" },
{ "sTitle": "Apellidos" },
{ "sTitle": "Móbil","bSortable": false },
{ "sTitle": "Fijo","bSortable": false },
{ "sTitle": "Terapeuta","bSortable": false },
{ "sTitle": "Edición","bSortable": false,"bSearchable": false }],
"fnDrawCallback": function() {
tb_init('a.thickbox');
}
});
} );
</script>
Есть идеи?? Заранее спасибо!!
Я исправляю его в параметрах javascript DataTable с полным URL-адресом в вызове ajax:
"ajax": "<?php echo $base; ?>table-load.php"
Таким образом, javascript выглядит примерно так:
<script type="text/javascript" src="<?php echo $base; ?>js/datatables.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#tablet').DataTable({
"language": {
"url": "js/Spanish.json"},
"scrollY": "500px",
"scrollCollapse": true,
"pageLength": 25,
"processing": true,
"serverSide": true,
"ajax": "<?php echo $base; ?>table-load.php",
"order": [[ 1, "asc" ]],
"aoColumns": [
{ "sTitle": "id","bVisible": false},
{ "sTitle": "Nombre" },
{ "sTitle": "Apellidos" },
{ "sTitle": "Móbil","bSortable": false },
{ "sTitle": "Fijo","bSortable": false },
{ "sTitle": "Terapeuta","bSortable": false },
{ "sTitle": "Edición","bSortable": false,"bSearchable": false }],
"fnDrawCallback": function() {
tb_init('a.thickbox');
}
});
} );
</script>
И php:
$table = 'paciente';
$primaryKey = 'id';
$columns = array(
array(
'db' => 'id',
'dt' => 0),
array(
'db' => 'nombre',
'dt' => 1,
'formatter' => function( $d, $row ) {
$links='<a href="../paciente/'.$row[0].'/0/">'.$row[1].'</a>';
return $links;
}),
array( 'db' => 'apellidos', 'dt' => 2 ),
array( 'db' => 'tel_mov', 'dt' => 3,
'formatter' => function( $d, $row ) {
$tels=$row[3];
return $tels;
}
),
array( 'db' => 'tel_casa', 'dt' => 4,
'formatter' => function( $d, $row ) {
$tels2=$row[4];
return $tels2;
}
),
array( 'db' => 'terapeuta', 'dt' => 5 ),
array(
'db' => 'id',
'dt' => 6,
'formatter' => function( $d, $row ) {
$links2='<a href="../print-historia.php?height=655&width=800&id='.$row[0].'" class=" thickbox"><img src="ima/edit.png" /></a> | <a href="?borrar=total&id='.$row[0].'" onClick="return confirmSubmit()"><img src="ima/close.png" /></a>';
return $links2;
}),
);
require( 'libraries/ssp.class.php' );
echo json_encode(
SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
);
Заметьте, что я положил ../
позади URL
Это сработало для меня...
У меня была аналогичная проблема. Проблема в том, что Datatable.js необходимо читать данные из ключа массива данных (чрезвычайно сложная информация, чтобы найти в своих документах честно).
Это означает, что вам нужно настроить свой PHP-скрипт, чтобы получить массив, который имеет эту структуру:
"success" => true|false // useful to display errors
"message" => string // explains the error (if occurred)
"data" => array // contains all your data
РЕДАКТИРОВАТЬ
Это пример массива PHP, который готов к кодированию и обработке DataTable.js. Обратите внимание на данные массива "data": DataTable.js будет искать элементы для отображения в этом файле jsonResponse.data.
<?php
// data fetched from database
$fromDatabase = [
'example',
'test',
'foo',
'bar'
];
$response = [
'success' => true,
'message' => '',
'data' => $fromDatabase
];
echo json_encode($response);
?>