【问题标题】:ajax request browser limitajax请求浏览器限制
【发布时间】:2009-05-22 15:29:11
【问题描述】:

一个更通用的问题开始。如果是 JSON 请求,ajax 请求的响应大小是否有限制?

我正在通过 JSON 请求传递大量数据,并在 FF3 中遇到“脚本堆栈配额已用完”消息。现在在 FF2 中配额为 4mb,但在 FF3 中为 640kb。我想知道这是否是特定于 JSON 的。正常的 ajax 请求是否有响应大小限制?一个可能由浏览器强加的?如果非 JSON 请求在脚本堆栈配额方面没有这些相同的问题,我该如何对返回的数据进行分类?也许是 XML...我不确定我的数据是否会在 w3c 规范的范围内。

【问题讨论】:

    标签: javascript ajax json


    【解决方案1】:

    iirc 这是去年 FF3 上的一个错误,但我相信(是的,检查了它here)它已修复。不过,往下看 cmets,有这样的注释:

    注意:此测试依赖于 架构和可用内存。在 具有 2G 和 64 位的 x86_64 机器 构建,它将失败 InternalError:脚本堆栈空间 但是在 x86_64 上配额已用完 使用 4G 和 64 位构建,它将 通过。

    cmets 还了解到这是一个纯 JS 问题,这意味着尽管数据格式严格来说并不重要,但非常大的 JSON 块可能会破坏 JS 堆栈,而 XML 字符串可能不会。我想你只需要尝试一下。

    OTOH,它被标记为已修复,所以有一个问题是确保你也使用最新版本的 FF。

    【讨论】:

      【解决方案2】:

      我怀疑发送数据和接收数据的限制是不同的,所以我假设它是围绕向客户端发送数据。 JSON 只是一种数据类型,真的。值得怀疑的是,您真正在做的是对 JavaScript 脚本发出 GET 请求,该脚本应限制在合理的大小范围内。 JSON 的 wiki 还说使用 XMLHTTPRequest 方法,这可能会绕过您的限制,但您仍然需要代理来避免跨域脚本限制并使用更合理的 mime 类型,如 html、xml、二进制等。如果您将任何图像放入 JSON 中,请记住它们可以是链接,因为这些请求不存在跨域问题。

      还要仔细检查,不是请求数量给您带来麻烦,浏览器也有限制。有时低至 2。

      【讨论】:

        【解决方案3】:

        我认为 anakata 是对的。

        错误消息的文本还表明问题的发生是由于您的 json 结构的深度,而不是它的 KB 大小。

        这意味着当您评估您的 json 时,JavaScript 引擎在解析 json 期间使用堆栈。由于 json 结构中的深度(嵌套元素的数量),此堆栈已达到其最大限制。

        您可能想检查一下更扁平的结构是否适合您的要求。

        【讨论】:

          【解决方案4】:

          作为一般规则,我会尽量减少我的 AJAX 数据。如果我必须传递大量数据,我将通过多次调用来检索它。因此,如果我正在加载一个表,我将有一个方法告诉我要返回多少条记录,另一种方法以 # 为一组返回记录(我通常是 20 条)。

          这样做的好处是我可以在检索数据时加载页面,并且用户无需等待一个大的有效负载。

          另外,最好使用 JSON 而不是 XML。 JSON 通常是比 XML 更小的有效负载,许多测试表明浏览器更容易加载它。

          【讨论】:

            【解决方案5】:

            我没有遇到任何实际限制,但是您的用户交互性将大数据分解为多个调用。大表需要很长时间才能通过 ajax 传输,尤其是在用户运行 IE 时。大数据 + Ajax + IE = IE 崩溃。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-10-14
              • 2012-04-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-28
              • 2010-09-17
              • 2012-05-10
              相关资源
              最近更新 更多