首页 > 解决方案 > 调用函数时服务器端数据表 ajax 返回“数据表警告:表 id=tblDataTable - 无效的 JSON 响应。”

问题描述

我有一个DataTableResponse.vb具有以下结构的类:

Public Class DataTableResponse
     Public draw As Integer
     Public recordsTotal As Integer
     Public recordsFiltered As Integer
     Public data As List(Of Restaurant)
End Class

在我的 aspx 页面中,我的服务器端数据表使用存储过程(method.GetData 采用 5 个参数)从 db 获取餐馆列表,以及我的 aspx 中的 ajaxDraw、OffsetValue、PagingSize、SearchBy、sortcolumn、sortDirection 等一些其他数据表属性用户选择的页面。

        $(document).ready(function () {
            //Once the document is ready call Bind DataTable
            BindDataTable();
        });

        function BindDataTable() {
            var mytable = $('#tblDataTable').DataTable({
                "processing": true,
                "serverSide": true,
                //"dataSrc": "",
                "ajax": {
                    url: "adminrestaurants.aspx/GetDataForDataTable", type: "post"
                },
                "columns": [
                    {
                        "data": "Title",
                    },
                    {
                        "data": "colorActive",
                        "render": function (data, type, row) { return "<i class='fa fa-fw fa-circle' style= color:" + data + "></i>" }
                    },
                    {
                        data: null,
                        className: "center",
                        defaultContent: '<a href="" class="edit btn btn-link">Edit</a>'
                    },
                    {
                        data: null,
                        className: "center",
                        defaultContent: '<a href="" class="view btn btn-link">View</a>'
                    },
                    {
                        data: null,
                        className: "center",
                        defaultContent: '<a href="" class="MenuImage btn btn-link"><i class="fas fa-utensils"></i></a>'
                    },
                    {
                        data: null,
                        className: "center",
                        defaultContent: '<a href="" class="RestImage btn btn-link"><i class="fa fa-image"></i></a>'
                    },
                    {
                        data: null,
                        className: "center",
                        defaultContent: '<a id="btn-delete" href="" class="delete btn btn-link"><i class="fa fa-trash"></i></a>'
                    },
                ],
                'columnDefs': [{
                    'targets': [2, 3, 4, 5, 6], /* column index */
                    'orderable': false, /* true or false */
                }],
                rowId: 'Id',

                "initComplete": function (settings, json) {
                    addDiv();
                },

            });

当我调用 Web 服务(asmx)类时,一切正常,但是我决定将 Web 服务转换为私有函数,如下所示:

<System.Web.Services.WebMethod()>
Public Shared Function GetDataForDataTable() As String
    Dim method As New methods
    Dim context As HttpContext = HttpContext.Current
    context.Response.ContentType = "text/plain"
    Dim columns As List(Of String) = New List(Of String)()
    columns.Add("Title")
    columns.Add("IsActive")
    columns.Add("Edit")
    columns.Add("View")
    columns.Add("RestImages")
    columns.Add("MenuImages")
    columns.Add("delete")
    Dim ajaxDraw As Int32 = Convert.ToInt32(context.Request.Form("draw"))
    Dim OffsetValue As Int32 = Convert.ToInt32(context.Request.Form("start"))
    Dim PagingSize As Int32 = Convert.ToInt32(context.Request.Form("length"))
    Dim searchby As String = context.Request.Form("search[value]")
    Dim sortColumn As String = context.Request.Form("order[0][column]")
    sortColumn = "r." & columns(Convert.ToInt32(sortColumn))
    Dim sortDirection As String = context.Request.Form("order[0][dir]")
    Dim dt As DataTable = method.GetData(sortColumn, sortDirection, OffsetValue, PagingSize, searchby)
    Dim recordTotal As Int32 = 0
    Dim restaurants As List(Of Restaurant) = New List(Of Restaurant)()

    If dt IsNot Nothing Then

        For i As Integer = 0 To dt.Rows.Count - 1
            Dim restaurant As Restaurant = New Restaurant()
            restaurant.Id = If(Convert.IsDBNull(dt.Rows(i)("RID")), Nothing, Convert.ToInt32(dt.Rows(i)("RID")))
            restaurant.Title = If(Convert.IsDBNull(dt.Rows(i)("Rtitle")), Nothing, Convert.ToString(dt.Rows(i)("Rtitle")))
            restaurant.IsActive = If(Convert.IsDBNull(dt.Rows(i)("Ractive")), Nothing, Convert.ToInt32(dt.Rows(i)("Ractive")))
            restaurant.colorActive = dt.Rows(i)("activeColor")
            restaurants.Add(restaurant)
        Next

        recordTotal = If(dt.Rows.Count > 0, Convert.ToInt32(dt.Rows(0)("FilterTotalCount")), 0)
    End If

    Dim recordFiltered As Int32 = recordTotal
    Dim objDataTableResponse As DataTableResponse = New DataTableResponse() With {
        .draw = ajaxDraw,
        .recordsFiltered = recordTotal,
        .recordsTotal = recordTotal,
        .data = restaurants
    }

    Return Newtonsoft.Json.JsonConvert.SerializeObject(objDataTableResponse.ToString)
End Function

我在页面加载时遇到以下错误 -> '**DataTables 警告:表 id=tblDataTable - JSON 响应无效。有关此错误的更多信息,请参阅http://datatables.net/tn/1**'

任何帮助深表感谢。

标签: jqueryjsonweb-servicesasp.net-ajaxserverside-datatable

解决方案


推荐阅读