javascript - jquery数据表,传递大json字符串
问题描述
我有一个 jQuery 数据表并使用 ajax 调用来填充它。C# 数据表中的数据在 Web 方法 API 中转换为 JSOn 字符串,并将结果传递给数据表。当我有几千行数据时它工作正常,但如果我有 100,000 行数据,我会出现内存不足错误。我四处寻找这个问题并尝试实施一些建议,但没有奏效。我不相信我有循环引用,因为(我猜)在这种情况下,即使是数据较小的引用也会失败。这是我所拥有的(到目前为止),响应提交按钮点击,数据表被填充:
var tblFacCert = $("#tblFacCert").DataTable({
jQueryUI: true,
data: [],
dom: 'lfrtip',
processing: true,
stateSave: true,
....
});
$("#btnSubmit").on("click", function (event) {
var facCertUrl = "../services/easg.asmx/GetComplianceReportData";
var facCertParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
populteTable(facCertUrl, facCertParams, tblFacCert);
})
function populteTable(ws_url, parameters, table) {
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
url: ws_url,
cache: false,
data: parameters,
}).done(function (result) {
table.clear().draw();
table.processing = true;
jResult = JSON.parse(result.d);
table.rows.add(jResult).draw();
}).fail(function (jqXHR, textStatus, errorThrown) {debugger
alert(textStatus + ' - ' + errorThrown); <--- Here I can see the following error thrown
});
}
// Error:
Exception of type 'System.OutOfMemoryException' was thrown.
StackTrace:
at System.Text.StringBuilder.ToString()
at System.Web.Script.Serialization.JavaScriptSerializer.Serialize(Object obj,
SerializationFormat serializationFormat)
at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)
ExceptionType:System.OutOfMemoryException
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string GetComplianceReportData(string startDate, string certID)
{
DateTime dtStartDate = Convert.ToDateTime(startDate);
int iCertItemID = int.Parse(certID);
DataTable dt = FacCompliance.GetFacCompliances(dtStartDate, iCertItemID);
string JSONresult;
JSONresult = JsonConvert.SerializeObject(dt);
/* I tried this, as was suggested in a post, no luck */
//StringBuilder sb = new StringBuilder();
//StringWriter sw = new StringWriter(sb);
//using (JsonWriter writer = new JsonTextWriter(sw))
//{
// var serializer = new JsonSerializer();
// serializer.Serialize(writer, dt);
//}
return JSONresult;
}
另一个建议,web.config 更改:
<configuration>
<appSettings>
....
<add key="aspnet:MaxJsonDeserializerMembers" value="500000"/>
</appSettings>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483647"/>
</webServices>
</scripting>
</system.web.extensions>
我还尝试在数据故事初始化中添加“serevrSide:true”,但如果这样做会出现此错误:
"Unhandled exception at line 36, column 442 in https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js
0x800a138f - JavaScript runtime error: Unable to set property 'data' of undefined or null reference"
解决方案
推荐阅读
- javascript - 如何在返回中显示从其他函数返回的 JSX?
- arrays - 查找动态分配数组的大小
- postgresql - 升级后缺少 Postgres 扩展
- r - 有没有一种更简单的方法可以在 data.frame 中创建具有 2 个以上级别的因子变量?
- flutter - 无法取消选中复选框
- python - 将网络抓取数据转换为数据框
- couchbase - Couchbase 服务器:连接上的缓慢 GET 操作
- django - 带有 model_to_dict(self) 的 ManyToManyField
- json - 在嵌套的复杂 JSON 中搜索键
- rust - 为什么它使用不可变引用而不是 ssh2::Channel 读取文件?