关于php:DataTables警告:table id = dataTables – Ajax错误。

DataTables warning: table id=dataTables - Ajax error. 404 Not Found

我试图通过php&ajax从MySQL数据库中获取数据,以便使用数据表显示在表中。我正在使用XAMPP 1.8.3

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<table id="dataTables-melate" class="table table-striped table-bordered table-hover" cellspacing="0" width="100%">
                                <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脚本(现在编辑并运行):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    //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 '[cc lang="php"]',print_r($new_array),'

号;$result=array();回声"[";foreach($new_array为$new_array2){回声"[";foreach(新数组2为$value){回声$value;如果($value!==结束($new_array2))//参考:http://stackoverflow.com/a/8780881/1883256回声',';}}echo']';//referencias:http://www.mydigitallife.info/how-to-access-php-array-and-multipdimension-nested-array-code-syntax/如果($new阵列2!==结束($new_array))。{回声',';}其他回音'';}回声"]";

1
<P>这就是PHP脚本的输出数据的样子(现在有了新的更改)</P>[cc lang="php"][[2738,11,12,28,30,50,54], ... ,[2757,32,34,35,36,50,55]]

下面是jquery代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$(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"}
        ]
    });
} );

当我加载页面(在Firefox中)时,我会得到以下错误:数据表警告:表id=datatables melate-ajax错误。Firebug也显示出了这个错误:404没有找到

我错过了什么?从那以后我就一直在努力:/


对于将Ajax与数据表结合使用,这个答案会有一些不同,希望它能有所帮助,因为它的代码要少得多。

当使用Ajax并向数据表中添加数据时,我通常采用以下方法:1)在服务器端回显json_编码,就像您正在做的那样。2)在我的Ajax调用的成功方法中,我可以这样做:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$.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中,您不需要返回数据作为关联数组。这就是我目前实现它的方式,它对我来说很好。

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