【问题标题】:Datatable jquery + ajax + php can't get data in table (Server-side processing)Datatable jquery + ajax + php 取不到表中的数据(服务器端处理)
【发布时间】:2016-07-07 22:47:41
【问题描述】:

我正在按照这个例子使用数据表https://datatables.net/examples/data_sources/server_side.html

所以我的桌子是:

<table cellpadding="0" cellspacing="0" border="0" class="display" id="tabellaGlossario">
    <thead>
        <th>
             <td>Voce</td>
             <td>Sinonimi</td>
             <td>Sigla</td>
             <td>Macrosettore</td>
             <td>Microsettore</td>      
             <td>Sinonimi</td>
             <td>Sigla</td>
             <td>Macrosettore</td>
             <td>Microsettore</td>           
        </th>
    </thead>
    <tfoot>
        <th>
             <td>Voce</td>
             <td>Sinonimi</td>
             <td>Sigla</td>
             <td>Macrosettore</td>
             <td>Microsettore</td>      
             <td>Sinonimi</td>
             <td>Sigla</td>
             <td>Macrosettore</td>
             <td>Microsettore</td>           
        </th>
    </tfoot>
</table>

我的js:

oTable = $('#tabellaGlossario').dataTable({
        "bJQueryUI": true,
        "sPaginationType": "full_numbers",
        "sDom": '<""f>t<"F"lp>',
        "processing": true,
        "serverSide": true,
        "ajax": "Modules/Glossario/View/Glossario.Table.View.php?lingua_select=2",
    });

我的 ajax 返回了:

{
  "draw": 1,
  "recordsTotal": 1,
  "recordsFiltered": 1,
  "data": [
    [
      "1",
      "2",
      "1",
      "1",
      "1",
      "Parola italiana",
      "Sinonimo italiano",
      "Sigla ita",
      "Note ita"
    ]
  ]
}

我的问题是我总是得到“表中没有可用数据”作为表结果。但正如您所见,ajax 有一些结果(本例中为 1)。 看来我的代码和官方例子中的一样。

无法理解为什么数据没有显示在表格中(并且我在浏览器控制台中没有错误)。

【问题讨论】:

    标签: php jquery ajax datatables serverside-javascript


    【解决方案1】:

    您使用的是动态加载还是任何类型的路由? 例如 angularjs ngroute 或一些框架的。

    在这种情况下它不能工作(不是你正在做的)。您可以按照this 之类的指南或http://jsfiddle.net/qu4a7j24/3/ 之类的示例进行操作

    <div ng-app='testTableApp'>
    
        <div class="container">
            <div ng-controller="mainTable">
                <form action="" method="POST" class="form-horizontal" role="form">
                    <div class="form-group">
                        <legend>Filters</legend>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-10 col-sm-offset-2">
                            <input type="text" value="0" ng-change='reloadData()' ng-model="start">
                            <input type="text" value="50" ng-change='reloadData()' ng-model="end">
    
                        </div>
                    </div>
                </form>
    
                <table datatable="" dt-options="dtOptions" dt-columns="dtColumns" class="table table-striped table-bordered"></table>
            </div>
        </div>
    </div>
    
    var testTableApp = angular.module( 'testTableApp', ['ngRoute', 'ngResource', 'datatables', 'datatables.tabletools', 'datatables.bootstrap', 'datatables.fixedheader'] );
    console.log( testTableApp );
    testTableApp.controller("mainTable", 
    [ '$scope', 'DTOptionsBuilder', 'DTColumnBuilder',
        function ( $scope, DTOptionsBuilder, DTColumnBuilder){
            $scope.dataSource = "http://dt.ishraf.com/ajax.php";
            $scope.start = 0;
            $scope.end = 5000;
    
    
            $scope.getDataSource = function(obj,prefix){
                var src = $scope.dataSource;
    
                var str = [];
                for(var p in obj) {
                    if (obj.hasOwnProperty(p)) {
                        var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
                        str.push(typeof v == "object" ?
                        serialize(v, k) :
                        encodeURIComponent(k) + "=" + encodeURIComponent(v));
                    }
                }
                return src + "?" + str.join("&");
            }
    
            var dsParams = {
                start : $scope.start,
                end : $scope.end
            }
    
            $scope.dsString = $scope.getDataSource( dsParams );
    
    
            $scope.buildTable = function(){
                return DTOptionsBuilder
                    .newOptions()
                    .withOption('ajax', {
                        // Either you specify the AjaxDataProp here
                        dataSrc: 'data',
                        url: $scope.dsString,
                        type: 'POST'
                    }).
                    withOption( 'lengthMenu', [
                        [10, 20, 50, 100, 150, 300, 500],
                        [10, 20, 50, 100, 150, 300, 500]
                    ])                
                    .withTableTools('bower_components/datatables-tabletools/swf/copy_csv_xls_pdf.swf')
                    .withTableToolsButtons([
                        {
                            "sExtends": "copy",
                            "sButtonText": "<i class='fa fa-copy'></i>&nbsp;|&nbsp;Copy",
                            "fnInit": function (nButton, oConfig) {
                                $(nButton).addClass('btn btn-success');
                            }
                        },
                        {
                            "sExtends": "print",
                            "sButtonText": "<i class='fa fa-print'></i>&nbsp;|&nbsp;Print",
                            "fnInit": function (nButton, oConfig) {
                                $(nButton).addClass('btn btn-danger');
                            }
                        },
                        {
                            "sExtends": "csv",
                            "sButtonText": "<i class='fa fa-file-o'></i>&nbsp;|&nbsp;CSV",
                            "fnInit": function (nButton, oConfig) {
                                $(nButton).addClass('btn btn-primary');
                            }
                        },
                        {
                            "sExtends": "pdf",
                            "sButtonText": "<i class='fa fa-file-pdf-o'></i>&nbsp;|&nbsp;PDF",
                            "fnInit": function (nButton, oConfig) {
                                $(nButton).addClass('btn btn-warning');
                            }
                        }
                    ])
                    .withFixedHeader({
                        bottom: true
                    })
                    .withDOM('<"clear"><"#top.hidden-print"<".row"<".col-md-6"i><".col-md-6"f>><".row"<".col-md-6"l><".col-md-6"p>><"clear">T>rt')
                    ;            
            }
    
    
            $scope.dtOptions = $scope.buildTable();
    
            $scope.buildColumns = function(){
                return [
                    DTColumnBuilder.newColumn('id').withTitle('ID'),
                    DTColumnBuilder.newColumn('firstName').withTitle('First name'),
                    DTColumnBuilder.newColumn('lastName').withTitle('Last name'),
                    DTColumnBuilder.newColumn('city').withTitle('city'),
                    DTColumnBuilder.newColumn('state').withTitle('state'),
                    DTColumnBuilder.newColumn('zip').withTitle('zip'),
                    DTColumnBuilder.newColumn('country').withTitle('country'),
                    DTColumnBuilder.newColumn('phone').withTitle('phone'),
                    DTColumnBuilder.newColumn('email').withTitle('email')
                ];
            }
    
            $scope.dtColumns = $scope.buildColumns();
    
    
            $scope.reloadData = reloadData;
            $scope.dtInstance = {};
    
            function reloadData() {
                var resetPaging = false;
                $scope.dtInstance.reloadData(callback, resetPaging);
            }
    
            function callback(json) {
                console.log(json);
            }
    
        }
    ]);
    

    或者只是动态创建表(.load jquery 很有用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2019-11-29
      • 2015-12-08
      • 1970-01-01
      相关资源
      最近更新 更多