DataTables警告:table id = DataTables_Table_0 - Ajax错误。有关此错误的更多信息,请参阅http://datatables.net/tn/7

时间:2015-05-09 17:57:10

标签: jquery datatable

我尝试了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);

}

?>

4 个答案:

答案 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 );
    //}