【问题标题】:DataTables warning: table id=DataTables_Table_0 - Ajax error. For more information about this error, please see http://datatables.net/tn/7DataTables 警告:table id=DataTables_Table_0 - Ajax 错误。有关此错误的更多信息,请参阅 http://datatables.net/tn/7
【发布时间】:2015-05-09 17:57:09
【问题描述】:

我尝试对 jQuery 数据表进行服务器处理,但出现错误:

DataTables 警告:表 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 警告:表 id=DataTables_Table_0 - 无效的 JSON 响应

还要注意,之前的 require 是: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);

}

?>

【问题讨论】:

  • 更多,我收到 POST 的空响应:columns[0][data] id columns[0][name] columns[0][orderable] true columns[0][search][正则表达式]假列[0][搜索][值]列[0][可搜索]真列[1][数据]ip列[1][名称]列[1][可排序]真列[1][搜索][regex] false columns[1][search][value] columns[1][searchable] .... until [9] .........and last: true draw 1 length 10 order[0 ][column] 0 order[0][dir] asc search[regex] false search[value] start 0
  • 更新:我收到了回复:datatables.net/development/server-side/php_mysql,但收到了 DataTables 警告:table id=DataTables_Table_0 - 请求第 0 行的未知参数“id”并进行调查。

标签: jquery datatable


【解决方案1】:

不惜一切代价。我有同样的问题。发生这种情况是因为我在 Windows 10 中部署了两个闪亮的应用程序。在执行第二个应用程序之前,我需要从任务管理器中完全强制关闭 RStudio。在此之后,DT 表加载良好。

【讨论】:

    【解决方案2】:

    这就是答案!我使用 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);
    
    }
    
    ?>
    

    【讨论】:

      【解决方案3】:

      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 预期之外的其他内容,这就是触发此错误的情况

      【讨论】:

        【解决方案4】:

        答案如下:

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

        【讨论】:

          【解决方案5】:

          打开服务器端文件 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 );
              //}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-12-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-22
            • 1970-01-01
            • 2019-08-15
            相关资源
            最近更新 更多