0

我尝试通过 ajax 发布一些数据。观看截图 1。但是 jQuery 自动将对象转换为数组。这可以在 screenshot2(chrome 开发者工具)中看到。

数据发送到 $.post:

在此处输入图像描述

chrome 开发者工具中的数据检查:

在此处输入图像描述

编辑:

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

在此处输入图像描述

我想读取这样的数据:

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

2 回答 2

2

PHP 文档中并没有很好地说明它,但它应该是这样工作的。例如,关于请求变量的页面有关于类似数组的 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 数组实际上是一个有序映射。换句话说,它非常适合存储您通过 POST 传递的 key => value 数据。

您似乎期望$_POST包含简单的对象(aka stdClass),但它根本没有。PHP 中的大多数 SOAP 助手都会为您提供简单的对象响应(这是 PHP 行为的典型混合)。如果您真的想将每个字段转换为对象,请参阅此问题以获取一些想法。$_POST["Data"]但这将是昂贵且不必要的。

于 2014-07-23T20:47:35.293 回答
0

答案是你实际上是在发送一个对象数组——而不是你想象的数组数组。以下是您发送到服务器的数据示例:

{
    Operations: "Add",
    TableName: "users",
    Data: [
        {
            Field: "username",
            Value: "test3"
        },
        {
            Field: "someOtherField",
            Value: "test4"
        },
        // ...
    ]
}

如果在 PHP 端,您只期望一个对象数组,而不是一个包含对象数组的对象,那么您应该改为 pass options.Parameters.Data,例如:

var result = $.post(url, options.Parameters.Data, // ...
于 2014-07-23T18:34:08.397 回答