Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 首次初始化后,DatatTable绘图不起作用_Jquery_Datatables - Fatal编程技术网

Jquery 首次初始化后,DatatTable绘图不起作用

Jquery 首次初始化后,DatatTable绘图不起作用,jquery,datatables,Jquery,Datatables,我使用JQuery DataTable,在筛选和排序服务器端数据时遇到了问题。它第一次在页面加载时运行良好,但下次我尝试对数据进行排序或筛选时,它不会重新绘制行 我调试了它,发现它获取了正确的数据,但没有绘制新数据 var modifyRequestData = function (d) { var d = $.parseJSON(d); var jsonData = {};

我使用JQuery DataTable,在筛选和排序服务器端数据时遇到了问题。它第一次在页面加载时运行良好,但下次我尝试对数据进行排序或筛选时,它不会重新绘制行

我调试了它,发现它获取了正确的数据,但没有绘制新数据

             var modifyRequestData = function (d) {

                var d = $.parseJSON(d);

                var jsonData = {};
                jsonData.data = d.Products;
                jsonData.recordsTotal = d.TotalCount;
                jsonData.recordsFiltered = d.Products.length

                return JSON.stringify(jsonData);
            };

            var modifyParams = function (d) {

                var params = {};

                params.Draw = d.draw;
                params.Page = parseInt(d.start) + 1;
                params.OrderColumn = d.columns[d.order[0].column].data;
                params.OrderType = d.order[0].dir;

                $(settings.searchFormID).find("input, select").each(function () {

                    var val = $(this).val();
                    var name = this.name;

                    params[name] = val;
                });

                return params;
            };

            var getProducts = function () {

                var columns = [
                  { "data": "Id" },
                  { "data": "Name" },
                  { "data": "Price" },
                  { "data": "Id" }
                ]

                var modifiedColumns = [{
                    'targets': 0,
                    'searchable': false,
                    'orderable': false,
                    'width': '1%',
                    'className': 'dt-body-center',
                    'render': function (data, type, full, meta) {
                        return '<input type="checkbox">';
                    }
                }, {
                    'targets': columns.length - 1,
                    'searchable': false,
                    'orderable': false,
                    'width': '1%',
                    'className': 'dt-body-center',
                    'render': function (data, type, full, meta) {
                        return ''
                    }
                }];

                var ajaxConfig = {
                    "url": "/api/products/",
                    "dataFilter": modifyRequestData,
                    "data": modifyParams
                }

                productDatatable = $('#listContainer table').DataTable({
                    "bProcessing": true,
                    "bServerSide": true,
                    "bFilter": true,
                    "lengthChange": true,
                    "ajax": ajaxConfig,
                    "columns": columns,
                    'columnDefs': modifiedColumns
                });

                productDatatable.on('draw.dt', function () {
                    alert('Table redraw');
                });

            };
var modifyRequestData=函数(d){
var d=$.parseJSON(d);
var jsonData={};
jsonData.data=d.产品;
jsonData.recordsTotal=d.TotalCount;
jsonData.recordsFiltered=d.Products.length
返回JSON.stringify(jsonData);
};
var modifyParams=函数(d){
var params={};
参数Draw=d.Draw;
参数Page=parseInt(d.start)+1;
params.OrderColumn=d.columns[d.order[0]。column]。数据;
params.OrderType=d.order[0].dir;
$(settings.searchFormID).find(“输入,选择”).each(函数(){
var val=$(this.val();
var name=this.name;
params[name]=val;
});
返回参数;
};
var getProducts=函数(){
变量列=[
{“数据”:“Id”},
{“数据”:“名称”},
{“数据”:“价格”},
{“数据”:“Id”}
]
var modifiedColumns=[{
“目标”:0,
“可搜索”:false,
“orderable”:false,
“宽度”:“1%”,
'className':'dt body center',
“呈现”:函数(数据、类型、完整、元){
返回“”;
}
}, {
“目标”:columns.length-1,
“可搜索”:false,
“orderable”:false,
“宽度”:“1%”,
'className':'dt body center',
“呈现”:函数(数据、类型、完整、元){
返回“”
}
}];
var ajaxConfig={
“url”:“/api/products/”,
“数据过滤器”:修改请求数据,
“数据”:modifyParams
}
productDatatable=$(“#listContainer表”).DataTable({
“bProcessing”:正确,
“bServerSide”:正确,
“bFilter”:没错,
“长度变化”:没错,
“ajax”:ajaxConfig,
“列”:列,
“columnDefs”:已修改的列
});
productDatatable.on('draw.dt',function(){
警报(“表格重画”);
});
};

我遇到了与您完全相同的问题,我最终发现,出于测试原因,我在服务器端的返回对象中将draw值硬编码为1

因此,由于第一次调用的draw属性的值为1,因此使用我的结果更新了datatable,但在更新时,draw值为4,我仍然返回1

您可以在jquery.dataTables.js文件中找到此函数:

function _fnAjaxUpdateDraw ( settings, json ) 
尤其是这个代码:

    if ( draw ) {
        // Protect against out of sequence returns
        if ( draw*1 < settings.iDraw ) {
            return;
        }
        settings.iDraw = draw * 1;
    }
if(绘制){
//防止顺序错误的返回
如果(绘制*1

在服务器端正确设置draw属性的值后,一切都开始正常工作。

好吧,对于所有列定义,“orderable”和“searchable”参数都为false。这可能就是问题所在。你有这个的JSFIDLE吗?