jquery - 调用函数时服务器端数据表 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**'。
任何帮助深表感谢。
解决方案
推荐阅读
- python - 在 django 模板中通过列表视图加载图像
- node.js - Neo4j:如何创建一个唯一节点而不是一组节点
- node.js - Heroku 错误,我不明白这是与 npm 包或超时有关的错误
- python - 如何访问同一字典的另一个键中的字典键值
- docker - Docker Alpine Texlive 错误:tlmgr:未找到
- c# - 数据库或文件是否更适合存储不同的用户输入,然后检索值以查找平均值或总和?
- oracle - “javax.persistence.SynchronizationType”的签名者信息与同一个包中其他类的签名者信息不匹配
- angular - 在@angular/cdk 中找不到拖放
- php - 方法在 Chrome/Firefox 网络开发工具中是“发布”,但在 PHP 请求方法中是“获取”
- regex - 是否有用于从网页中查找所有问题句子的正则表达式?