我收到了#34;没有足够的存储空间来完成此操作。"尝试在jqGrid中添加数据(20K记录)时出错。这个问题发生在IE 9中。
代码:
//此行将20k记录添加到jqgrid
$.when(GetDataBySelectedCode())
.done(function (ResultData) {
if (ResultData!= null) {//able to get result here
BindDataInGridNoLimit(ResultData);
}
}).fail(function (xhr, textStatus, errorThrown) {
if (textStatus != 'abort') {
//todo: error message
}
});
function BindDataInGridNoLimit(data)
{
DataGrid[0].addJSONData(data);//fails while adding data
}
调用堆栈
环境:
观察:
a)具有20K记录的相同代码在Chrome中运行良好。 b)在IE 9中,几百条记录的相同代码工作正常。
问题:
此问题是否与jqgrid和IE 9组合有关?如何解决这个问题?
感谢任何建议/解决方案。
答案 0 :(得分:1)
在我看来,您尝试添加大量数据,无需本地分页。它没有真正的意义,它很慢,用户必须滚动到下方查看数据。使用小rowNum
值会更有效,它会指定页面的大小并使用datatype: "local"
或loadonce:true
或datatype: "jsonstring"
。用户需要点击"下一页"按钮以查看下一部分数据。这是一个小缺点,但使用滚动条滚动网格行也需要时间。一个人将拥有的主要优势:数据将作为纯JavaScript数据在本地保存。你将没有DOM大小的问题(没有这样的错误)。您获得的最重要的优势:更好的性能。我怀疑用户几乎可以立即看到第一页数据,快速停留在行上,数据滚动也很快。
我建议你打开一个树形演示,它们都在jqGrid中加载90000行数据。 The first demo显示25行,您可以轻松滚动4500页数据。 The second grid从90000行显示1000,用户可以向下滚动查看1000行,用户可以使用本地分页查看90页(每页1000行)。如果您尝试打开the last demo,尝试同时显示所有90000行,您将等待很长时间并在结束时收到错误消息。
我很清楚,我的建议意味着更改代码和更改用户界面。另一方面,应该清楚的是,在网格中填充数千行没有多大意义。没有人会滚动并读取所有数据。 2-5页的数据绝对够用。网格应该只有过滤器工具栏,以便用户可以填充数据并显示数据的小部分真的很有趣。