我正在使用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的导出,它们可以使用更大的数据集吗?
答案 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 },
是导致原始帖子中导出函数出现循环错误的原因。删除这些行后,导出将数据传递给后面的代码而没有错误。
我希望这有助于将来的某些人。