【问题标题】:Passing JSON or similar object via URL and parsing in PHP通过 URL 传递 JSON 或类似对象并在 PHP 中解析
【发布时间】:2011-08-20 23:34:24
【问题描述】:

情况如下:

由于我无法控制的情况,我正在编写一个仅通过 JSON 公开数据的后端。

用户界面是纯 HTML/jQuery。来自 UI 的所有查询都会生成一个 JSON 对象(通常非常复杂)。我需要 UI 能够向我传递一个包含多个 Id 和字符串列表的复杂对象。

实现这个的最简洁的方法是什么?

  • 多个 GET/POST 参数,其中一些是列表,例如 &List=1,2,3
  • 作为单个参数的完整 JSON 对象,例如 ?Data={"List"=[1,2,3]}
  • 完全不同。

如果您做过类似的事情,我会对您的体验感兴趣 - 尤其是在将对象定义传递给客户端方面。

在这种情况下,想象以下数据包...

{
    Id: 1,
    Status: "Processing",
    RecordTypeAIds: (1,2,3)
    RecordTypeBIds: (4,5,6)
    RecordTypeCIds: null
}

将这些信息从 jQuery 发送到 PHP 的最佳方式是什么(请记住,列表可能嵌套 n-deep)

感谢您提供的任何帮助。

【问题讨论】:

  • @hakre 那么,php5 标签有什么问题? phpphp5 不是同义词,似乎有一个版本可以提供更多信息?更不用说这个 Q 已经有一年多了,到目前为止一切都很好——有新的指导方针吗?
  • 不,根本没有新的指导方针。最近有关于这个的活动,所以它被更新为使用更好描述的标签。您的问题并非特定于 PHP5,因此 5 已被删除。就这样。只是一些家务。
  • @hakre - 谢谢“你的问题不是特定于 PHP5,所以 5 已被删除”。那是我没有建立的联系。
  • 啊,好吧。如果您有更多问题/疑虑,请告诉我。

标签: php jquery parsing url


【解决方案1】:

只是把我的意见放在那里。我更喜欢 JSON,只需通过您喜欢的方法 (GET/POST) 发送复杂对象,它们几乎立即成为 PHP 中的对象/数组,使用 globals($_POST['key']) 和 json_decode()。如果您使用 jQuery,则使用 $.ajax()、$.get() 或 $.post() 可以轻松实现“发送”部分。 POST 理论上没有数据限制,因此对于任意大的数据集,它会更可取。

【讨论】:

  • 我同意,JSON 和表单 $_POST(或 AJAX)是更好的选择,我在项目中使用过。
【解决方案2】:

使用 Data={... your object ...} 的(几乎)所有 JSON 解决方案。 在 PHP 中你需要 $data = json_decode($_REQUEST['Data']);。 jQuery 也有类似的浏览器端支持功能。

对于 HTML 表单和常规 URL .. 编写一个服务器端适配器,将 $_REQUEST 中的参数转换为等效的 $data 结构并调用与上面相同的代码。如果您使用 PHP 数组表示法命名您的 HTML 字段,那么这可以像 $data = $_REQUEST;

HTML 示例

<input type='hidden' name='Status' value='Processing'>
<input type='hidden' name='RecordTypeAIds[0]' value='1'>
<input type='hidden' name='RecordTypeAIds[1]' value='2'>
<input type='hidden' name='RecordTypeAIds[2]' value='3'>

在 $_REQUEST 中作为示例结构的(子集)出现。

在表单元素中使用 PHP 数组表示法的问题是……如果您需要从 JSON 填充这样的表单,那么您必须在 Javascript 中编写一个稍微复杂的解码函数来将 JSON 结构映射到正确的字段名称。没有避免解码功能的好方法,因为 DOM 表单名称系统是扁平的,其中 JSON 字段名称是嵌套的,并且对于 JSON 数组元素,名称(索引)是隐式的。在表单元素名称中使用 PHP 数组表示法以外的任何东西只会在服务器端增加工作量。

【讨论】:

    【解决方案3】:

    如果您想将 JSON 对象传递给 PHP,则在 5.2.0 及更高版本中默认包含所需的方法。 http://www.php.net/manual/en/function.json-decode.php

    【讨论】:

      猜你喜欢
      • 2012-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多