DataTables加载数据报错:未知参数问题求助
DataTables请求未知参数'LastName'报错排查
我查阅了datatables.net关于AJAX填充DataTable的文档,但问题仍未解决,当前遇到报错:DataTables warning: table id=employee_table - Requested unknown parameter 'LastName' for row 0, column 0
相关代码及信息
1. ASP.NET Core控制器方法
[HttpGet ("EmployeesJSON")] public JsonResult EmployeesJSON() { var AllEmployees = _iEmployeeService.GetAllEmployees(); var json = JsonConvert.SerializeObject(AllEmployees, Formatting.Indented); return new JsonResult(json); }
2. 控制器返回结果
返回内容为被引号包裹的JSON字符串,而非直接的对象数组(即JSON被双重序列化)。
3. AJAX请求代码
var _data; $(document).ready(function () { $.ajax({ type: $(this).attr('GET'), url: "Employees/EmployeesJSON", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { // 请求成功后 _data = response; initDataTable(); // 初始化DataTable } }); });
4. AJAX获取的数据格式
response实际是一串JSON文本字符串,而非可直接遍历的对象数组。
5. DataTable初始化方法
function initDataTable() { var employeeTable = $('#employee_table').DataTable( { scrollX: true, scrollY: 400, data: _data, columns: [ { sName: "LastName", data: "LastName", bSearchable: true, bSortable: false } ], lengthMenu: [[25, 50, -1], [25, 50, 'All']], }); }
6. 错误信息
DataTables警告:table id=employee_table - Requested unknown parameter 'LastName' for row 0, column 0
问题根源与解决方案
问题根源
控制器中先通过JsonConvert.SerializeObject手动序列化对象集合,再用JsonResult返回,导致JSON被双重序列化——最终响应是字符串类型的JSON,AJAX拿到的response是这个字符串,DataTable尝试从字符串中读取LastName字段,自然无法找到。
解决方案
方案1:修复控制器代码(推荐)
去掉手动序列化步骤,直接返回对象集合,ASP.NET Core会自动处理正确的JSON序列化:
[HttpGet ("EmployeesJSON")] public JsonResult EmployeesJSON() { var AllEmployees = _iEmployeeService.GetAllEmployees(); // 直接返回对象,框架自动序列化 return Json(AllEmployees); }
方案2:简化为DataTable自带AJAX请求(最佳实践)
无需手动编写AJAX,让DataTable直接发起请求并处理响应,减少冗余代码:
$(document).ready(function () { $('#employee_table').DataTable({ scrollX: true, scrollY: 400, ajax: { url: "Employees/EmployeesJSON", dataType: "json" }, columns: [ { data: "LastName", searchable: true, sortable: false } ], lengthMenu: [[25, 50, -1], [25, 50, 'All']] }); });
方案3:临时修复(不推荐)
如果暂时无法修改控制器,可在AJAX回调中把字符串重新解析为JSON对象:
success: function (response) { // 将字符串解析为对象数组 _data = JSON.parse(response); initDataTable(); }
内容的提问来源于stack exchange,提问作者Tamara Pattinson
相关产品推荐
相关产品推荐

