jQuery DataTables循环引用错误

时间:2017-03-16 13:44:39

标签: jquery vb.net datatables pagemethods

我正在使用jQuery DataTables后面的VB代码。我正在尝试编写自定义Excel导出,因为内置的Excel导出功能实际上不适用于大型数据集。

此外,我想导出已在搜索框中过滤的行。

JS:

excelExport: function () {
            var table = $('#myTable').DataTable();

            //filtered rows data as arrays
            var filteredData = table.rows({ filter: 'applied' }).data();

            PageMethods.ExcelExport(filteredData);               
        }

filteredData输出到控制台:

[ Array[20], Array[20], Array[20],...] 

这似乎是我可以使用的东西。当我尝试使用PageMethods将对象传回服务器端时,我遇到了这个可怕的错误:

  

未捕获错误:Sys.InvalidOperationException:无法在子属性中使用循环引用序列化对象。

然后我尝试将filteredData传递给JSON.stringify并收到类似的错误:

  

未捕获的TypeError:将循环结构转换为JSON

有没有人遇到这个或有任何关于如何解决这个问题的想法?到目前为止,我的研究还没有提出解决方案。

或者有更好的方法来处理这些jQuery DataTables的导出,它们可以使用更大的数据集吗?

1 个答案:

答案 0 :(得分:0)

我弄清楚我的问题是什么。根据Bindrid的评论,我将我的查询简化为一列id来测试他的理论。我仍然得到循环引用错误。然后我开始剥离额外的jQuery数据表函数。

我的表定义或多或少如下。

 table = $('#myTable').dataTable({

                    "bSortClasses": false,
                    "ajax": {
                        "type": "POST",
                        "url": "/page.aspx/FillTable",
                        "data": {},
                        "contentType": "application/json; charset=utf-8",
                        "dataSrc": "d",                        
                        "error": function (result) {
                            // write the error to the console otherwise.
                            console.log(result.responseJSON.Message + "\n\r\n\r" + result.responseJSON.StackTrace);
                        }
                    },
                    "dom": "<'row'<'col-md-3'l><'col-md-6'><'col-md-3'f>>" +
                                "<'row'<'col-md-12't>>" +
                                "<'row'<'col-md-6'i><'col-md-6'p>>",      
                    },
                    "order": [[2, "asc"]],                   
                    "columnDefs": [
                    {
                        "targets": [1],
                        "title": "unique",
                        "visible": false,
                        "searchable": false                    
                    }],
                    scrollX: true,
                    scrollCollapse: true,                    
                    fixedColumns: {
                        leftColumns: 3
                    },
                    iDisplayLength: 10,
                    initComplete: function (settings, json) {
                        console.log('DataTable has finished initialization.');                       
                    }
                });
            }

fixedColumns: { leftColumns: 3 },是导致原始帖子中导出函数出现循环错误的原因。删除这些行后,导出将数据传递给后面的代码而没有错误。

我希望这有助于将来的某些人。