0

私は ajax 経由でいくつかのデータを投稿しようとしています。スクリーンショット1をご覧ください。しかし、jQuery は自動的にオブジェクトを配列に変換します。これは、スクリーンショット 2 (Chrome 開発者ツール) で確認できます。

$.post へのデータ送信:

ここに画像の説明を入力

Chrome 開発者ツールでのデータ検査:

ここに画像の説明を入力

編集:

Data プロパティがオブジェクトの配列であると予想される PHP で問題が発生します。

ここに画像の説明を入力

次のようなデータを読みたい:

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

2 に答える 2

2

PHP のドキュメントでは詳しく説明されていませんが、このように動作するはずです。たとえば、リクエスト変数のページには、配列のような Cookie について次のように書かれています。

複数の値を 1 つの Cookie 変数に割り当てたい場合は、配列として割り当てることができます。例えば:

<?php
  setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
  setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>

これにより、2 つの個別の Cookie が作成されますが、MyCookie はスクリプト内で単一の配列になります。複数の値を持つ Cookie を 1 つだけ設定する場合は、最初に値に対して serialize() または expand() を使用することを検討してください。

言い換えれば、あなたが送るとき:

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 で渡すキー => 値データの格納に最適です。

$_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 側で、オブジェクトの配列を含むオブジェクトではなく、オブジェクトの配列のみoptions.Parameters.Dataを期待している場合は、代わりに次のように を渡す必要があります。

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