$ .post正在将对象数组更改为数组数组

时间:2014-07-23 18:24:29

标签: javascript php jquery ajax http-request-parameters

我尝试通过ajax发布一些数据。观看sreenshot1。但是jQuery会自动将对象转换为数组。这可以在screenshot2(chrome developer tools)中看到。

数据发送到$ .post:

enter image description here

Chrome开发人员工具中的数据检查:

enter image description here

编辑:

问题出现在PHP中,我希望Data属性是对象数组:

enter image description here

我想读取这样的数据:

foreach ($_POST["Data"] as $field)
{
    if ($field->Field == "username")
    {
            ...
    }
}

2 个答案:

答案 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, // ...