【发布时间】:2016-01-20 07:04:21
【问题描述】:
我有一个带有 Knockout.JS 和 Knockout-mapper.js 的 DataTable 实现。我使用 ajax 调用来获取我的数据,它可以很好地处理 5k 条记录。但是当我尝试获取 10 万条记录时,我得到了
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
谁能指出我正确的方向,我怎样才能在我的网格中获取大量数据。
页面:
<script type="text/javascript">
$(function () {
function viewModel(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
}
$.ajax({
url: "@Url.Action("GetRecordsJsonResultAll")", success: function (data) {
ko.applyBindings(new viewModel(data));
$("#items").DataTable({
responsive: true
});
}
});
});
</script>
<div class="row">
<table id="items" class="table table-striped table-hover table-bordered">
<thead>
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
</tr>
</thead>
<tbody data-bind="foreach: items">
<tr>
<td><span data-bind="text: $data.Id"></span></td>
<td><span data-bind="text: $data.FirstName"></span></td>
<td><span data-bind="text: $data.LastName"></span></td>
<td><span data-bind="text: $data.Email"></span></td>
</tr>
</tbody>
</table>
</div>
来自控制器的 JSON 结果(100k 个结果)
public virtual JsonResult GetRecordsJsonResultAll()
{
var userBusinessLogic = InterfaceResolver.ResolveWithTransaction<IUserBusinessLogic>();
var records = userBusinessLogic.GetAll().Select(x => new
{
x.Id,
x.FirstName,
x.LastName,
x.Email
}).OrderBy(i => i.Id);
var data = Json(new
{
max = records.Count(),
items = records
}, JsonRequestBehavior.AllowGet);
return data;
}
感谢您的帮助。
【问题讨论】:
-
你检查过json吗?可能有一个特殊字符(如撇号/语音标记)破坏了需要编码的 json,这就是为什么会出现错误而不是结果的数量。
-
是的,我有 JSON 很好。我有一个相同的函数,它只能得到 1000 个结果,而且它工作没有问题。
-
您是否检查过错误日志以确定错误的性质。错误 500 表示服务器端发生了故障。理想情况下,您需要某种形式的日志记录,以准确识别诸如这些(您面临的问题)之类的问题。
-
这不是我得到的唯一错误。数据库需要大约 20 秒才能返回 100.000 个结果,我确实得到了所有项目,它们甚至被发送到查看,但我认为某种超时是问题所在。
-
这是你web.config中的请求限制大小,你估计json是多长时间?
标签: c# asp.net-mvc knockout.js datatables