【发布时间】:2015-06-15 18:48:40
【问题描述】:
我收到“没有足够的存储空间来完成此操作。”尝试在 jqGrid 中添加数据(20K 记录)时出错。这个问题出现在 IE 9 中。
代码:
//这行向jqgrid添加20k条记录
$.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
}
调用堆栈
环境:
- ASP.NET Web 窗体、Visual Studio 2012、jqGrid 4.6.0、IE 9、jquery 1.11.1
- 在 jqGrid 中,我没有启用分页,因为它是来自 最终用户。
观察:
a) 具有 20K 记录的相同代码在 Chrome 中运行良好。 b) 包含数百条记录的相同代码在 IE 9 中运行良好。
问题:
这个问题是否与 jqgrid 和 IE 9 组合有关?如何解决这个问题?
感谢任何建议/解决方案。
【问题讨论】:
-
jqGrid (
jquery.jqgrid.src.js) 代码的哪一行在产生错误的堆栈上(点击 IE 调试器右侧的“调用堆栈”)?图片只显示了 jQuery 1.11.1 内部的错误,但不清楚代码将在哪里调用。能否尝试将ui.jqgrid.css、grid.locale-en.js和jquery.jqGrid.src.js的URL临时替换为free jqGrid 4.9的URL,试一下是否报错?在我看来,问题是因为一个已经修复的旧错误。 -
好的,让我试试你的建议。
-
@Oleg,使用调用堆栈信息更新问题。
-
标准显示只能显示25-30行数据。因此,一次显示 10 个页面,使用
rowNum: 300, datatype: "jsonstring", datastr: data就足够了。用户可以使用滚动条滚动超过 300 行(约 10 页)。要查看更多数据,用户将不得不使用寻呼机按钮。可以考虑使用toppager: true在网格顶部显示第二个(或唯一的)寻呼机。网格的 DOM 将仅包含 300 行,加载、滚动、悬停、选择行等将非常快。我希望你使用gridview: true选项。您可以发布您使用的代码。 -
你应该不要忘记使用我在the demo 中使用的技巧:仅在
onInitGrid中设置data或datastr稍后。 它从本质上提高了创建网格的性能,如演示所示。有关详细信息,请参阅the answer。如果您在 4.6 更高的版本中使用 jqGrid,例如免费的 jqGrid 4.9,则不需要使用该技巧,因为 jqGrid 在内部执行所有必需的步骤。
标签: javascript jquery jqgrid internet-explorer-9