DataTables 警告:table id=dataTables - Ajax 错误。 404 未找到

Posted

技术标签:

【中文标题】DataTables 警告:table id=dataTables - Ajax 错误。 404 未找到【英文标题】:DataTables warning: table id=dataTables - Ajax error. 404 Not Found 【发布时间】:2014-07-04 17:51:51 【问题描述】:

我正在尝试通过 php 和 Ajax 从 mysql 数据库中获取数据,然后使用 DataTables 将数据显示在表格中。我正在使用 XAMPP 1.8.3

这是我的 html 代码的一部分:

<table id="dataTables-melate" class="table table-striped table-bordered table-hover" cellspacing="0" >
                                <thead>
                                    <tr>
                                        <th>Concurso</th>
                                        <th>R1</th>
                                        <th>R2</th>
                                        <th>R3</th>
                                        <th>R4</th>
                                        <th>R5</th>
                                        <th>R6</th>
                                    </tr>
                                </thead>

                                <tfoot>
                                    <tr>
                                        <th>Concurso</th>
                                        <th>R1</th>
                                        <th>R2</th>
                                        <th>R3</th>
                                        <th>R4</th>
                                        <th>R5</th>
                                        <th>R6</th>
                                    </tr>
                                </tfoot>
</table>

这是我的 php 脚本(现在可以编辑并运行):

    //default_chart_numbers.php
    $loteria='revancha';
    $lotto = new Lotto();

    $ultimos_resultados=$lotto->last_results($loteria,20);

    //echo json_encode($ultimos_resultados);
/*Formatting the output to a non associative array*/
function objectToArray($d) 

    if (is_object($d)) 
        // Gets the properties of the given object
        // with get_object_vars function
        $d = get_object_vars($d);
    

    if (is_array($d)) 
        /*
        * Return array converted to object
        * Using __FUNCTION__ (Magic constant)
        * for recursive call
        */
        return array_map(__FUNCTION__, $d);
     else 
        // Return array
        return $d;
    


$new_array = objectToArray($ultimos_resultados);
//echo '<pre>',print_r($new_array),'</pre>';

$result = array();
echo '[';
foreach ($new_array as $new_array2) 
    echo '[';
    foreach ($new_array2 AS $value)
        echo $value;
        if($value!==end($new_array2)) //referencias: http://***.com/a/8780881/1883256
            echo',';
        
    
    echo ']';//referencias: http://www.mydigitallife.info/how-to-access-php-array-and-multidimensional-nested-arrays-code-syntax/
    if($new_array2!==end($new_array))
        echo ',';
    else echo '';

echo ']';

这是 PHP 脚本的输出数据的样子(现在有了新的变化):

[[2738,11,12,28,30,50,54], ... ,[2757,32,34,35,36,50,55]]

这里是 jQuery 代码:

<script>
$(document).ready(function() 
    $('#dataTables-melate').dataTable(
        "bProcessing": true,
        "bServerSide": true,
        "sAjaxSource": 
            "url":"ajax/default_chart_numbers.php",
            "type": "POST"
        ,
        "columns":[
            "data": "concurso",
            "data": "R1",
            "data": "R2",
            "data": "R3",
            "data": "R4",
            "data": "R5",
            "data": "R6"
        ]
    );
 );
</script>

当我加载页面(在 Firefox 中)时,我收到此错误: DataTables 警告:table id=dataTables-melate - Ajax 错误。 Firebug 也告诉我们这个错误:404 Not Found

我错过了什么? 这么久以来我一直在努力解决这个问题:/

【问题讨论】:

我在 chrome 上遇到同样的错误:/ 【参考方案1】:

这个答案将是一种将 AJAX 与 DataTables 结合使用的方法有些不同,希望它对一些人有所帮助,因为它的代码要少得多。

当使用 AJAX 并向 DataTables 添加数据时,我通常会走这条路: 1)就像你正在做的那样在服务器端回显json_encode。 2)在我的ajax调用的成功方法中,我会有这个:

其中“column_data”基本上只是对应的数据值数组 到每一列。 DataTables 通过计数自动以这种方式添加数据 此数组中有多少个值并将每个值(列数据)推送到行 基于数组中的索引。 所以基本上你只需要确保你拥有的列数 等于此数组的大小,并确保在此数组中,您的数据 是按照您希望它显示的正确顺序。

$.ajax(
    url: "your_path",
    type: "post_or_get",
    success : function (resp)
        // would look something like ['val1','val2', 'etc']
        var column_data = $.parseJSON(resp);

        // adding data to datatables
        // if column_data is 1 row
        $('your_table_element').dataTable().fnAddData(column_data);

        // to add multiple rows (array of arrays, just loop)
        for (var j=0;j<=column_data.length-1;++j)
            // adding each row with its column data
            $('your_table_element').dataTable().fnAddData(column_data[j]);
        
    ,
    error: function(jqXHR, textStatus, ex) 
      console.log(textStatus + "," + ex + "," + jqXHR.responseText);
    
);

所以在 PHP 中,您实际上并不需要返回数据是关联数组。这就是我目前正在实施的方式,对我来说效果很好。

注意:此方法的一个常见错误是返回数据数组的长度不等于您拥有的列数。所以确保它们是平等的。如果不是,您可能会从 DataTables 中看到一个错误,提示某列不存在等。

【讨论】:

我试过了,但现在出现以下错误:DataTables 警告:table id=dataTables-melate - Requested unknown parameter '0' for row 0 现在表格看起来很好,但是是空的。它遇到了应该显示的 20 个值(因为在表中它说:显示 20 个值中的 10 个)。 你的返回数据是数组吗?我认为这就是为什么它说unknown parameter'0' 它必须在索引 0 处查看您的第一行数据。 fnData() 仅添加一行,我忘了提及这一点。我会将其添加到编辑中。因此,要使用 fnData(),您只需要遍历您的结果集并每次调用它,我会随时更新帖子。 好吧检查编辑。确保注释掉不需要的部分(成功方法中的循环或单行)。你不应该两者都需要。 好的。我用循环尝试了它并评论了单行。我仍然得到同样的错误,但现在这个错误出现了 20 倍。它以unknown parameter '0' for row '0' 开头,然后javascript 警报继续显示unknown parameter '0' for row '20',直到unknown parameter '0' for row '39' 已编辑:好的。我用循环尝试了它并评论了单行。我仍然得到同样的错误,但现在这个错误出现了 20 倍。它以unknown parameter '0' for row '0' 开头,然后javascript 警报继续显示unknown parameter '0' for row '1',直到unknown parameter '0' for row '19'

以上是关于DataTables 警告:table id=dataTables - Ajax 错误。 404 未找到的主要内容,如果未能解决你的问题,请参考以下文章

DataTables 警告(表 id = 'table-filter'):从数据源请求未知参数 '0' 用于数据表中的第 0 行错误

DataTables 警告:table id=example - 无法重新初始化 DataTable - jQuery

ajax datatable - DataTables警告:table id = example - 无法重新初始化DataTable

DataTables 警告:表 id=id - 请求行 row-index、列 column-index 的未知参数“parameter”

DataTables warning: table id=DataTables_Table_0 - Requested unknown paramete

DataTables warning: TABLE id=DataTables_Table_0 - Requested UNKNOWN parameter '7' FOR ROW 0(