【问题标题】:IE7 Ajax out of memory errorIE7 Ajax 内存不足错误
【发布时间】:2013-02-24 04:44:47
【问题描述】:

我正在编写的脚本进行 ajax 调用,它在 Firefox、chrome 和 IE8+ 上运行良好。但是在 IE7 上,我遇到了内存不足的错误。内存高达 120MB。我正在使用 jQuery 1.8.3。该错误也发生在 jQuery 1.9 和 1.7 中。

来源:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: 'data.asmx/GetChildren',
    data: '{parent:"program","child":"office","id":' + this.Item_id + '}',
    dataType: 'json',
    success: function (r) {
        var data = r.d.data;
    }
});

这是我获得的 IE7 配置文件:

编辑:更新源 编辑:终于有时间再次解决这个问题。原来是一个简单的循环问题。不是 jQuery ajax 的错。

【问题讨论】:

  • 那么,代码在哪里?
  • 发布更多代码,例如 $.ajax 嵌套的函数。我怀疑它的原因。缺少一些东西
  • success 函数可以在任何浏览器上运行吗?如果是这样,您可以发布响应数据吗?
  • 可能是反序列化 json 的问题。您可以尝试将ajax调用替换为仅反序列化相应json字符串的脚本,看看问题是否仍然存在
  • 您是否尝试过进行原始 ajax 调用(没有 jQuery?)

标签: javascript jquery internet-explorer-7


【解决方案1】:

如果孩子的数量更多,那么返回给var data的值会更多。

JSON 字符串的最大长度。默认为 2097152 个字符,相当于 4 MB 的 Unicode 字符串数据。 source Microsoft

所以大小不是问题,但是字符如果超过那就是​​一个问题。 :)

【讨论】:

    【解决方案2】:

    不知道是否与您的问题有关,但有两件事使您的数据成为无效的 JSON。

    parent 必须用引号引起来,就像 id 值一样(您只是关闭和重新打开字符串)。

    所以,应该是这样的:

    $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: 'data.asmx/GetChildren',
            data: '{"parent":"program","child":"office","id":"' + this.Item_id + '"}',
            dataType: 'json',
            success: function (r) {
                var data = r.d.data;
            }
    });
    

    【讨论】:

      【解决方案3】:

      如果已禁用虚拟内存,则可能会出现此问题。
      要启用虚拟内存,请按以下步骤操作:

      单击开始按钮,指向设置,然后单击控制面板。 双击系统图标。 在性能选项卡上,单击虚拟内存。 单击“让 Windows 管理我的虚拟内存设置(推荐)”选项。或者,如果您必须使用自己的虚拟内存设置,请为最大大小留出尽可能多的空间。 点击确定。

      【讨论】:

      • 我不认为是这样。这似乎是一个 jQuery + IE 7 错误。我无法告诉我的用户启用虚拟内存。
      【解决方案4】:

      根据 jQuery 文档,您可以传递纯对象,因此我建议改用对象。您也可以尝试像这样使用 Id,看看是否有什么不同。

      var id = this.Item_id; //
      $.ajax
      ({
          type: "POST",
          url: 'data.asmx/GetChildren',
          data: {"parent":"program","child":"office","id": id},
          dataType: 'json',
          success: function (r) 
          {
              //Please use console.log(r) and see what is coming back here
          }
      });
      

      或者干脆

      var id = this.Item_id; //
      $.post("data.asmx/GetChildren", 
      {
          "parent":"program",
          "child":"office",
          "id": id
      }, function(r)
      {
          //console.log(r);
      },"json");
      

      【讨论】:

      • IE7不支持console.log功能
      • 我知道 IE7 没有 console.log,但请在 Firefox 中尝试此操作,或者只是为了检查从服务器返回的内容。
      【解决方案5】:

      您是否尝试发送 JSON.stringify 而不是 Object,并在服务器端解码?

      https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify
      

      【讨论】:

      【解决方案6】:
      $.ajax({
          type: "POST",
          contentType: "application/json; charset=utf-8",
          url: 'data.asmx/GetChildren',
          data: '{parent:"program","child":"office","id":' + this.Item_id + '}',
          dataType: 'text',
          success: function (r) {
              var data = (eval("[" + r + "]")[0]).d.data;
          }
      });
      
      • 将数据类型更改为“文本”。
      • 使用 eval("[" + textJson + "]")[0] 获取对象数据。
        • 如果仍然失败,将“var data = ...”行替换为“var data = r;”如果失败也报告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-20
        • 1970-01-01
        • 2020-10-15
        • 2014-10-21
        • 2016-10-20
        • 2013-01-17
        相关资源
        最近更新 更多