You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:12:46