我尝试通过ajax发布一些数据。观看sreenshot1。但是jQuery会自动将对象转换为数组。这可以在screenshot2(chrome developer tools)中看到。
数据发送到$ .post:
Chrome开发人员工具中的数据检查:
编辑:
问题出现在PHP中,我希望Data属性是对象数组:
我想读取这样的数据:
foreach ($_POST["Data"] as $field)
{
if ($field->Field == "username")
{
...
}
}
答案 0 :(得分:2)
在PHP文档中并没有很好地说明,但这就是它应该如何运作的。例如,request variables上的页面可以说明类似数组的Cookie:
如果要为单个cookie变量分配多个值,可以将其指定为数组。例如:
<?php
setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
这将创建两个单独的cookie,尽管MyCookie现在将成为脚本中的单个数组。如果您只想设置一个具有多个值的cookie,请考虑首先对值使用serialize()或explode()。
换句话说,当您发送时:
FormData[0][Field]: username
FormData[0][Value]: test3
PHP将此解释为数组数组,如下所示:
array(1) {
[0]=> array(2) {
['Field'] => String(8) "username",
['Value'] => String(5) "test3"
}
}
你可以像这样解析它:
foreach ($_POST["Data"] as $field)
{
if ($field['Field'] == "username")
{
...
}
}
请记住PHP array is actually an ordered map。换句话说,它非常适合存储密钥=&gt;您通过POST传递的价值数据。
您似乎期望$_POST
包含简单对象(又名stdClass
),而它根本就没有。 PHP中的大多数SOAP帮助程序将为您提供简单的对象响应(这是PHP行为的典型混合)。如果您确实要将每个$_POST["Data"]
字段转换为对象,请参阅this question了解一些想法。但那将是昂贵且不必要的。
答案 1 :(得分:0)
答案是你实际上正在发送一个对象数组 - 而不是你想象的数组数组。以下是您要发送到服务器的数据示例:
{
Operations: "Add",
TableName: "users",
Data: [
{
Field: "username",
Value: "test3"
},
{
Field: "someOtherField",
Value: "test4"
},
// ...
]
}
如果在PHP方面你期望只一个对象数组,而不是一个包含对象数组的对象,那么你应该传递options.Parameters.Data
,如:
var result = $.post(url, options.Parameters.Data, // ...