Javascript $.post正在将对象数组更改为数组数组
我试图通过ajax发布一些数据。看《斯雷恩肖特》。但jQuery会自动将对象转换为数组。这可以在screenshot2(chrome开发者工具)中看到 数据发送到$。邮政: chrome开发者工具中的数据检查: 编辑: PHP中出现问题,我希望数据属性是对象数组: 我想读取如下数据:Javascript $.post正在将对象数组更改为数组数组,javascript,php,jquery,ajax,http-request-parameters,Javascript,Php,Jquery,Ajax,Http Request Parameters,我试图通过ajax发布一些数据。看《斯雷恩肖特》。但jQuery会自动将对象转换为数组。这可以在screenshot2(chrome开发者工具)中看到 数据发送到$。邮政: chrome开发者工具中的数据检查: 编辑: PHP中出现问题,我希望数据属性是对象数组: 我想读取如下数据: foreach ($_POST["Data"] as $field) { if ($field->Field == "username") { ... }
foreach ($_POST["Data"] as $field)
{
if ($field->Field == "username")
{
...
}
}
array(1) {
[0]=> array(2) {
['Field'] => String(8) "username",
['Value'] => String(5) "test3"
}
}
答案是,实际上您发送的是一个对象数组,而不是您想象的数组。以下是发送到服务器的数据示例:
{
Operations: "Add",
TableName: "users",
Data: [
{
Field: "username",
Value: "test3"
},
{
Field: "someOtherField",
Value: "test4"
},
// ...
]
}
如果在PHP端,您只需要一个对象数组,而不是一个包含对象数组的对象,那么您应该传递options.Parameters.Data
,比如:
var result = $.post(url, options.Parameters.Data, // ...
PHP文档中并没有很好地阐述它,但这就是它应该如何工作的。例如,上的页面对类似数组的Cookie进行了如下说明: 如果希望为单个cookie变量分配多个值,可以将其分配为数组。例如: PHP将其解释为数组数组,如下所示:
foreach ($_POST["Data"] as $field)
{
if ($field->Field == "username")
{
...
}
}
array(1) {
[0]=> array(2) {
['Field'] => String(8) "username",
['Value'] => String(5) "test3"
}
}
您可以这样解析它:
foreach ($_POST["Data"] as $field)
{
if ($field['Field'] == "username")
{
...
}
}
请记住,一个。换句话说,它非常适合存储随帖子传递的key=>value数据
您似乎希望
$\u POST
包含简单的对象(也称为stdClass
),但它根本没有。PHP中的大多数SOAP助手都会给您提供简单的对象响应(这是PHP行为的典型混合)。如果确实要将每个$\u POST[“Data”]
字段转换为对象,请参阅以获取一些想法。但这样做既昂贵又不必要。这是一个对象数组。更具体地说,它是一个包含一个对象数组作为其属性之一的对象。对于此类问题,它可以帮助解释您实际试图获得的输出。“在PHP中出现的问题,我希望数据属性是对象数组”您的对象将是PHP中的关联数组。这是个问题吗?或者,您可以将整个数组编码为JSON。这不是答案,但对于上面的一行,options.Parameters=options.Parameters |{}
更短,可能更高效。您可以将$field->field
更改为$field['field']
,问题就会解决。或者像我说的,将数据编码为JSON,他说“我希望数据属性是对象数组”,是的,以前没有。但是,无论哪种方式,它都是一个对象数组。