javascript - DataTables 警告 - 为第 0 行、第 0 列请求未知参数 '0'

标签 javascript c# jquery datatables

我正在使用 jQuery DataTable 来显示使用存储过程和 Web 服务从数据库中获取的数据。我可以使用 Fiddler 运行 SP 或服务,但在填充 DataTable 时,我收到错误记录 here .在我的具体情况下,消息是:

“DataTables 警告:表 id=tblCashRecord - 为第 0 行、第 0 列请求了未知参数‘0’”

然后发生的是我的 DataTable 显示了正确的行数,但所有单元格都是空的。

我很确定 HTML 表格中的列数与我使用 aoColumns 推送的列数相同(是四),但我可能错了。我知道有很多相同的问题被问到,但是 this是我发现可能相关的唯一有用的,我也试过 this没有成功。

我的 HTML 表格:

<table id="tblCashRecord" class="table table-bordered">
    <thead>
        <tr>
            <th>Kiosk Name</th>
            <th>Service Type</th>
            <th>Transaction Timestamp</th>
            <th>Amount (RM)</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
    <tfoot>
        <tr>
            <th colspan="3" style="text-align: right">Total:</th>
            <th><span id="totalAmount" style="margin-left: -8px;"></span></th>
        </tr>
    </tfoot>
</table>

我的Javascript:

$.ajax({
                        type: "POST",
                        url: "../Services/Report.svc/GetCashPaymentRecord/?s=" + session + "&r=" + reference,
                        data: "{\"kioskID\":" + JSON.stringify(kioskID) + "," + "\"startDate\": " + JSON.stringify(startDate) + "," + "\"endDate\":" + JSON.stringify(endDate) + "}",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (response) {
                            if (response.success == true) {
                                if (response.cashPayment != null && response.cashPayment.length > 0) {
                                    cashList = response.cashPayment;
                                    var data = { "aaData": [] };

                                    $('#tblCashRecord').dataTable().fnClearTable();
                                    $('#tblCashRecord').dataTable().fnDestroy();

                                    $.each(response.cashPayment, function (item) {
                                        data.aaData.push({
                                            "id": item.id,
                                            "kioskName": item.kioskName,
                                            "total": item.total,
                                            "transactionTimestamp": moment.utc(item.transactionTimestamp).format("DD-MM-YY HH:mm:ss"),
                                            "serviceType": item.serviceType,
                                            "paymentType": item.paymentType, //remove later in SP
                                            "paymentRecordID": item.paymentRecordID
                                        });
                                    });

                                    table = $('#tblCashRecord').DataTable({
                                        "paging": false,
                                        "ordering": false,
                                        "bAutoWidth": false,
                                        "bSortable": false,
                                        "bFilter": false,
                                        "bInfo": false,
                                        dom: 'Blfrtip',
                                        "aaData": data.aaData,
                                        "aaColumns": [
                                            { "mData": "kioskName" },
                                            { "mData": "serviceType" },
                                            { "mData": "transactionTimestamp" },
                                            { "mData": "total" }
                                        ]
                                    });

                                    $('#tblCashRecord tbody tr').each(function () {
                                        var col = $(this).find('td:eq(3)').html();
                                        total += parseFloat(col);
                                    });

                                    $('#totalAmount').html(total.toFixed(2));
                                    $('.sorting_asc').removeClass('sorting_asc');
                                }
                                else {
                                    $('#tblCashRecord').dataTable().fnClearTable();
                                    $('#tblCashRecord').dataTable().fnDestroy();

                                    $('#tblCashRecord').dataTable({
                                        "paging": false,
                                        "ordering": false,
                                        "bAutoWidth": false,
                                        "bSortable": false,
                                        "bFilter": false,
                                        "bInfo": false,
                                        "oLanguage": {
                                            "sEmptyTable": "No Record Found."
                                        }
                                    });
                                    $('#totalAmount').html("");
                                    $('.sorting_asc').removeClass('sorting_asc');
                                }
                            }
                            else {
                                $('#tblCashRecord').dataTable().fnClearTable();
                                $('#tblCashRecord').dataTable().fnDestroy();

                                $('#tblCashRecord').dataTable({
                                    "paging": false,
                                    "ordering": false,
                                    "bAutoWidth": false,
                                    "bSortable": false,
                                    "bFilter": false,
                                    "bInfo": false,
                                    "oLanguage": {
                                        "sEmptyTable": "Error: Could not load data."
                                    }
                                });
                                $('#totalAmount').html("");
                                $('.sorting_asc').removeClass('sorting_asc');
                            }
                        }
                    });

我的网络服务:

cashPaymentResponse IReport.GetCashPaymentRecord(string session, string reference, cashPaymentRequest request)
        {
            Guid sessionID, referenceID, kioskID;
            Guid.TryParse(session, out sessionID);
            Guid.TryParse(reference, out referenceID);
            Guid.TryParse(request.kioskID, out kioskID);

            if (sessionID == Guid.Empty)
            {
                return new cashPaymentResponse("Invalid Session.");
            }

            DateTime startDate, endDate;

            try
            {
                startDate = new DateTime(Convert.ToInt32(request.startDate.Substring(6, 4)), Convert.ToInt32(request.startDate.Substring(3, 2)), Convert.ToInt32(request.startDate.Substring(0, 2)), 0, 0, 0);

                endDate = new DateTime(Convert.ToInt32(request.endDate.Substring(6, 4)), Convert.ToInt32(request.endDate.Substring(3, 2)), Convert.ToInt32(request.endDate.Substring(0, 2)), 23, 59, 59);
            }
            catch (Exception ex)
            {
                return new cashPaymentResponse("No Date Selected.");
            }

            List<ReportCashPaymentRecord_Result> result;
            try
            {
                using (MyDBEntities context = new MyDBEntities())
                {
                    result = context.ReportCashPaymentRecord(sessionID, kioskID, startDate, endDate).ToList();
                }
            }
            catch (Exception ex)
            {
                if (isDebug() == false)
                {
                    return new cashPaymentResponse("Database connection failed.");
                }
                else
                {
                    return new cashPaymentResponse(ex.Message);
                }
            }

            if (result.Count > 0)
            {
                cashPaymentResponse response = new cashPaymentResponse();
                cashPaymentItem item;
                response.cashPayment = new List<cashPaymentItem>();

                for (int i = 0; i < result.Count; i++)
                {
                    item = new cashPaymentItem();

                    if (result[i].kioskName == "session")
                    {
                        return new cashPaymentResponse("Invalid Session.");
                    }
                    else
                    {
                        item.id = (Guid)result[i].cashID;
                        item.paymentRecordID = (Guid)result[i].paymentRecordID;
                        item.total = (decimal)result[i].total;
                        item.transactionTimestamp = JsonConvert.SerializeObject(new DateTime(result[i].transactiontimestamp.Value.Year, result[i].transactiontimestamp.Value.Month, result[i].transactiontimestamp.Value.Day, result[i].transactiontimestamp.Value.Hour, result[i].transactiontimestamp.Value.Minute, result[i].transactiontimestamp.Value.Second, 0, DateTimeKind.Utc)).Replace("\"", "");
                        item.kioskName = result[i].kioskName;
                        item.serviceType = (result[i].serviceType.ToString() == "0") ? "Assessment" : (result[i].serviceType.ToString() == "1") ? "Water Bill" : (result[i].serviceType.ToString() == "2") ? "Rental" : (result[i].serviceType.ToString() == "3") ? "Compound" : "None";
                        item.paymentType = (result[i].paymentType.ToString() == "1") ? "Cash" : (result[i].paymentType.ToString() == "3") ? "Credit Card" : (result[i].paymentType.ToString() == "2") ? "Cheque" : "None";

                        response.cashPayment.Add(item);
                    }
                }
                return response;
            }
            else
            {
                return new cashPaymentResponse();
            }
        }

我的 JSON 响应(实际上有 8 个条目,但我只包含第一个以减少困惑):

{
    "success": true,
    "cashPayment": [
        {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "kioskName": "00001",
            "paymentRecordID": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
            "paymentType": "Cash",
            "serviceType": "Water Bill",
            "total": 100,
            "transactionTimestamp": "2016-01-21T10:15:21Z"
        }
    ]
}

编辑:我已经在上面的响应中编辑了 GUID 以删除敏感信息。

最佳答案

经典匈牙利符号错字。 aaColumns 应该是 aoColumns - 对于array o对象。然后我相信它会起作用。 aoColumns 是 1.10.x 的顺便说一句,现在称为 columns(但这两个名称仍受支持)。

一般来说,使用新的 1.10.x 驼峰式命名约定,请跳过所有围绕文字名称的引用:

table = $('#tblCashRecord').DataTable({
  paging: false,
  ordering: false,
  autoWidth: false,
  sortable: false,
  filter: false,
  info: false,
  dom: 'Blfrtip',
  data: data.aaData,
  columns: [
    { data: "kioskName" }, 
    { data: "serviceType" }, 
    { data: "transactionTimestamp" },
    { data: "total" }
  ]
});

更新每条评论。在您更正“aaColumn”之后出现空单元格的原因是您以错误的方式使用了$.each:

$.each(response.cashPayment, function (item) {

应该是

$.each(response.cashPayment, function (index, item) { //<----
    data.aaData.push({
      "id": item.id,

您不小心试图从索引中取出属性,而不是对象。

关于javascript - DataTables 警告 - 为第 0 行、第 0 列请求未知参数 '0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459101/

相关文章:

javascript - ember.js + Handlebars : render vs outlet vs partial vs view vs control

c# - 我们如何使用 Java 中的泛型来使它们看起来更好 :

c# - 在简单注入(inject)器中注册为单例的具有两个接口(interface)的类的行为是什么

c# - RDLC 报告隐藏空白响应列

php - 如何确保对 CakePHP Controller /操作的 jQuery 自动完成调用中的路径正确解析?

javascript - [Vue warn] : Invalid prop: type check failed for prop "eventKey". 预期字符串、数字、获取数组并避免使用非原始值作为键

javascript - 异步每个和 foreach 函数

jquery-ui - jquery mobile内部页面的ajax实现

javascript - 使用 jQuery Cookie 在数组中存储和返回值

javascript - 如何禁用下面的按钮,直到以上所有部分至少单击一个