我尝试了jQuery数据表的服务器处理,但收到错误:
DataTables警告:table id = DataTables_Table_0 - Ajax错误
当我从server.php中删除以下代码时
require( '/machines/jquery/ssp.class.php' );
echo json_encode(
SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
);
然后得到错误:
DataTables警告:table id = DataTables_Table_0 - 无效的JSON响应
另请注意,之前的要求是:require('ssp.class.php');按照https://datatables.net/examples/server_side/post.html但我试图在我的ubuntu操作系统中的整个/目录中找到ssp.class.php但是没有这样的php文件所以搜索谷歌并复制该文件并保存在/machines/jquery/ssp.class下.php但仍然没有运气。
我已经检查了所有的php,pdp ..设置,这是正确的,所以代码中有问题,或者我的服务器不理解jQuery给出服务器处理示例的方式。
客户端数据处理没有问题,但服务器端数据处理会产生上述错误。
root@m100:~# php -i|grep PDO
PDO
PDO support => enabled
PDO drivers => mysql
PDO Driver for MySQL => enabled
client.php:
<div>
<h3>Machines Data</h3>
<div class="container">
<div id="machines-data" style="padding-left: 15px; padding-right: 15px;"></div>
<table class="table machines-data" border="1">
</table>
</div>
</div>
<script>
$(document).ready(function () {
});
<script>
$(function(){
$("#progress").show();
$(".machines-data").dataTable({
"processing": true,
"serverSide": true,
"ajax": { "url": "/machines/server.php", "type": "POST" },
"columns": [
{ "data": "id" },
{ "data": "ip" },
{ "data": "machine" },
{ "data": "action" },
]
});
})
</script>
server.php:
<?php
ignore_user_abort(true);
if($_POST) {
$table = '1_machine_data';
$primaryKey = 'id';
$columns = array(
array( 'db' => 'id', 'dt' => 'id' ),
array( 'db' => 'ip', 'dt' => 'ip' ),
array( 'db' => 'machine', 'dt' => 'machine' ),
array( 'db' => 'action', 'dt' => 'action' ),
);
$sql_details = array(
'user' => 'root',
'pass' => 'pass',
'db' => 'machine',
'host' => 'localhost'
);
require( '/machines/jquery/ssp.class.php' );
echo json_encode(
SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
);
exit (0);
}
?>
答案 0 :(得分:1)
不管它值多少钱。我有同样的问题。这是因为我在 Windows 10 中部署了两个闪亮的应用程序。在执行第二个应用程序之前,我需要从任务管理器中完全强制关闭 RStudio。此后,DT 表加载良好。
答案 1 :(得分:0)
这是答案!我使用php + datatable服务器处理代码,而不是SSP的东西..
<?php
ignore_user_abort(true);
if($_POST) {
$aColumns = array( 'id', 'ip', 'machine', 'status' );
$sIndexColumn = "id";
$sTable = "1_machines";
$gaSql['user'] = "root";
$gaSql['password'] = "pwd";
$gaSql['db'] = "machines";
$gaSql['server'] = "localhost";
function fatal_error ( $sErrorMessage = '' )
{
header( $_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error' );
die( $sErrorMessage );
}
if ( ! $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) )
{
fatal_error( 'Could not open connection to server' );
}
if ( ! mysql_select_db( $gaSql['db'], $gaSql['link'] ) )
{
fatal_error( 'Could not select database ' );
}
$sLimit = "";
if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
{
$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
intval( $_GET['iDisplayLength'] );
}
$sOrder = "";
if ( isset( $_GET['iSortCol_0'] ) )
{
$sOrder = "ORDER BY ";
for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
{
if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
{
$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
}
}
$sOrder = substr_replace( $sOrder, "", -2 );
if ( $sOrder == "ORDER BY" )
{
$sOrder = "";
}
}
$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
$sWhere = "WHERE (";
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
}
$sWhere = substr_replace( $sWhere, "", -3 );
$sWhere .= ')';
}
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
{
if ( $sWhere == "" )
{
$sWhere = "WHERE ";
}
else
{
$sWhere .= " AND ";
}
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
}
}
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
FROM $sTable
$sWhere
$sOrder
$sLimit
";
$rResult = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
$sQuery = "
SELECT FOUND_ROWS()
";
$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
$iFilteredTotal = $aResultFilterTotal[0];
$sQuery = "
SELECT COUNT(`".$sIndexColumn."`)
FROM $sTable
";
$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() );
$aResultTotal = mysql_fetch_array($rResultTotal);
$iTotal = $aResultTotal[0];
$output = array(
"sEcho" => intval($_GET['sEcho']),
"iTotalRecords" => $iTotal,
"iTotalDisplayRecords" => $iFilteredTotal,
"aaData" => array()
);
while ( $aRow = mysql_fetch_array( $rResult ) )
{
$row = array();
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
if ( $aColumns[$i] == "started_on" )
{
$row[] = ($aRow[ $aColumns[$i] ]=="0") ? ' - ' : $aRow[ $aColumns[$i] ];
}
else if ( $aColumns[$i] != ' ' )
{
/* General output */
$row[] = $aRow[ $aColumns[$i] ];
}
}
$output['aaData'][] = $row;
}
echo json_encode( $output );
exit (0);
}
?>
答案 2 :(得分:0)
DataTables警告:表格ID = DataTables_Table_0-Ajax错误
主要由于您调用POST方法获取数据或没有任何GET函数/方法而导致此错误。
如果我用ASP.NET Core进行说明。
您要使用从后端获取的数据加载DataTable
方法是这样的public IActionResult GetAll()
,然后就可以了,但是
如果您放置[HttpPost]
并像这样设置
[HttpPost]
public IActionResult GetAll()
这是POST方法。因此,现在您没有GET方法,因此它会搜索GET方法,但没有任何GET方法。现在,在这种情况下,您将得到
DataTables警告:表格ID = DataTables_Table_0-Ajax错误
如果您期望POST做出一些响应,则可以将数据设为0或期望的内容为空,但是如果获得Undefined,null或DataTable期望的内容以外的其他信息,则可能是此错误触发了
答案 3 :(得分:-1)
打开服务器端文件ssp.class.php并注释第20-23行。
//REMOVE THIS BLOCK - used for DataTables test environment only!
//$file = $_SERVER['DOCUMENT_ROOT'].'/datatables/mysql.php';
//if ( is_file( $file ) ) {
//include( $file );
//}