情况如下:
由于我无法控制的情况,我正在编写一个仅通过JSON公开数据的后端。
UI是纯HTML / jQuery。来自UI的所有查询都会产生JSON对象(通常非常复杂)。我需要UI能够传递一个复杂的对象,其中包括多个ID和字符串列表。
实现这一目标的最佳方式是什么?
&List=1,2,3
?Data={"List"=[1,2,3]}
如果你做过类似的事情,我会对你的经历感兴趣 - 特别是关于将对象定义传递给客户的问题。
在这种情况下,想象一下以下数据包......
{
Id: 1,
Status: "Processing",
RecordTypeAIds: (1,2,3)
RecordTypeBIds: (4,5,6)
RecordTypeCIds: null
}
将此信息从jQuery发送到PHP的最佳方式是什么(请注意,列表可能嵌套在n-deep中)
感谢您提供的任何帮助。
答案 0 :(得分:3)
只是把我的意见放在那里。我更喜欢JSON,只需通过首选方法(GET / POST)发送复杂对象,它们几乎立即成为PHP中的对象/数组,使用全局变量($ _ POST ['key'])和json_decode()。如果您使用jQuery,则可以使用$ .ajax(),$ .get()或$ .post()轻松实现“发送”部分。 POST理论上没有datalimit,因此对于任意大的数据集,它将是更可取的。
答案 1 :(得分:2)
使用Data = {...您的对象...}的(几乎)所有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数组表示法之外的任何内容只会在服务器端执行更多操作。
答案 2 :(得分:1)
如果要将JSON对象传递给PHP,则默认情况下会在5.2.0及更高版本中包含所需的方法。 http://www.php.net/manual/en/function.json-decode.php