【问题标题】:A good way to send complex objects with ajax?使用 ajax 发送复杂对象的好方法?
【发布时间】:2009-08-28 01:07:04
【问题描述】:

在我的网络应用程序中,我有一些用 JavaScript 编写的复杂对象(即嵌套数组、对象内的对象与对象等),而我的应用程序的性质依赖于这些。我需要将所有数据发送到 PHP,以便我可以将其保存到数据库中。将我的对象发送到 PHP 的有效、简单的方法是什么?我尝试了 JSON,但遇到了奇怪的错误,例如“递归过多”,我猜这意味着我的对象对它来说太复杂了。那么是否有一个好的脚本库可以做到这一点?提前致谢。

编辑:

那么 JSON。我尝试更新 JSON 库无济于事,我现在正在寻找循环引用。

【问题讨论】:

  • 对象是循环的,还是不是树?例如。 A=[B,C],B=[D],C=[D],D=[]。 JSON 只能表示树的对象。
  • 有没有一种简单的方法可以找到循环,还是我必须手动完成?我是手动猜测的,对吧?
  • @Breton:那篇文章谈到了检测序列中的循环;不确定它在这里是否相关。
  • 当然它是相关的,但我承认它的相关性有点模糊。一旦确定了要检测图中的循环,就必须递归。然后你有一个递归序列。每个递归都在检查一个值。所以这是一个值序列。其中一些值是 javascript 对象。一旦你走到那一步,这篇文章突然开始变得更加相关,因为任务就是在你递归时寻找 javascript 对象序列中的重复。

标签: php ajax json


【解决方案1】:

JSON 正确的答案。

我怀疑您的 JSON 库要么损坏,要么限制太多。检查 JSON 以查看它是否格式正确,如果是,请找到一个更好的库来处理您的数据结构。

考虑简化数据结构。它可能对你自己的利益来说太复杂了。

【讨论】:

    【解决方案2】:

    如果您的对象具有循环引用,几乎所有 JSON 库都会出现过多的递归错误。我尝试过的 javascript 实现的递归限制远远超过约 100 级深度,因此您的对象必须真的复杂。

    在尝试使用任何类型的库对对象进行序列化之前,您需要检测并消除循环引用。

    编辑:刚刚测试了 firefox 3.5,它的递归级别达到了 3000 级。

    【讨论】:

      【解决方案3】:

      我同意 - JSON 就是答案。我认为您遇到的错误可能是您正在使用的库的一部分...

      http://markmail.org/message/2d5lvmdeg2qg55qr

      提到了同样的错误。

      我使用过许多复杂的 JSON 对象,但从未遇到过该错误 - 我想说还有其他问题。

      【讨论】:

      • 我试过你的链接说的,我仍然得到同样的错误,对不起。
      • 您是否有机会发布导致错误的数据样本?您可能还想通过验证器运行数据以查看它是否标记了任何内容。 jsonlint.com
      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2016-10-21
      相关资源
      最近更新 更多