【问题标题】:Line: 5571 Error: Not enough storage is available to complete this operation行:5571 错误:没有足够的存储空间来完成此操作
【发布时间】: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.cssgrid.locale-en.jsjquery.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 中设置datadatastr 稍后它从本质上提高了创建网格的性能,如演示所示。有关详细信息,请参阅the answer。如果您在 4.6 更高的版本中使用 jqGrid,例如免费的 jqGrid 4.9,则不需要使用该技巧,因为 jqGrid 在内部执行所有必需的步骤。

标签: javascript jquery jqgrid internet-explorer-9


【解决方案1】:

在我看来,您尝试添加大量数据没有本地分页。它没有真正的意义,它很慢,用户必须滚动到下面才能看到数据。使用小的rowNum 值会更有效,它指定页面的大小并使用datatype: "local"loadonce:truedatatype: "jsonstring"。用户需要单击“下一页”按钮才能查看下一部分数据。这是一个小缺点,但使用滚动条滚动网格行也需要时间。其主要优点是:数据将在本地保存为纯 JavaScript 数据。 DOM 大小不会有问题(没有这样的错误)。您获得的最重要的优势:更好的性能。我怀疑用户实际上会立即看到第一页数据,悬停在行上会很快,滚动数据也会很快。

我建议你打开树演示,它都在 jqGrid 中加载了 90000 行数据。 The first demo 显示 25 行,您可以轻松滚动超过 4500 页数据。 The second grid 显示 90000 行中的 1000 行,用户可以向下滚动查看 1000 行,并且用户可以使用本地分页浏览 90 页(每页 1000 行)。如果您尝试打开 the last demo 并尝试一次显示所有 90000 行,您将等待很长时间,最后可能会收到一条错误消息。

很明显,我的建议意味着更改代码和更改用户界面。另一方面,应该清楚的是,在网格中填充数千行并没有多大意义。没有人会滚动并阅读所有数据。 2-5页的数据绝对够用了。网格应该只有过滤器工具栏,以便用户可以填充数据并显示数据的一小部分他真的很感兴趣

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多