1

クライアントのjQueryコードからサーバーのPHPコードに配列を送信したいと思います。jQuery側では、これが私が行っていることです。

$.ajax( {
    url: someUrl,
    data: {
       action:  'opensearch',
       search:  query,
       namespace:   [10, 846],
       suggest:     ''
    },
    dataType: 'json',
});

PHP側:

echo $params['action'] ."\r\n";
echo $params['namespace'][0] ."\r\n";
echo $params['namespace'][1] ."\r\n";

これの出力は次のとおりです。

opensearch
0

したがって、文字列を正しく印刷することができたので、パラメーターは正しく送信されます。ただし、アレイは正しく送信されていないようです。

私はオプションjson_decodeの有無にかかわらず使用しようとしましたが、役に立ちませんでした。true

どんな提案でも大歓迎です。

4

6 に答える 6

1

json_decode()は、有効なJSON文字列をオブジェクトに変換します。以下に説明する3つのパラメーターを受け入れます。

JSON文字列自体。

オプションのパラメーターassoc:デフォルトでは、この値はfalseです。trueに変更すると、json_decodeはオブジェクトを連想配列に変換します

Depth:JSON文字列で許可される再帰構造の最大深度。PHP5.3以前は128でした。PHP 5.3では、この制限がデフォルトで512バイトに増加しています。このパラメーターもオプションです。

$objJson = json_decode($json);
于 2012-12-07T21:17:24.083 に答える
1
$.ajax( {
    url: someUrl,
    type:'post'
    data: encodeURIComponent('action=opensearch&search=query&namespace[]=10&namespace[]=846&suggest='),
    dataType: 'json',
});

php

$params=json_decode($_POST);
    echo $params->action;
于 2012-12-07T21:11:31.883 に答える
0

データはJSONとして投稿されておらず、適切なHTTPPOSTで投稿されています。

ただし、PHPはそれを配列に変換するだけです。フィールドの名前は、配列であることを示すように構造化されています。置き換えてみてくださいnamespace: [10, 846]"namespace[]": [10, 846]

現在、jQueryはこれを投稿している可能性があります:namespace=10&namespace=846、これは適切に配列に変換されません。角かっこを追加すると、それを処理する必要があります。

于 2012-12-07T21:15:15.527 に答える
0

変数をデコードする必要はありません$_POST。実際には、必要な$_POSTデータが既に含まれています。

テストを行い、次のコードで jsonpost.php を作成します。

<?php

    if (count($_POST) > 0)
    {
        header("Content-type: text/plain; charset=utf-8");
        echo nl2br(var_export($_POST, true));
        die();
    }

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    </head>
    <body>
        <div id="target"></div>

        <script type="text/javascript">

            $.ajax( {
                url: 'jsonpost.php',
                type:'post',
                data: {
                   action:  'opensearch',
                   search:  'test',
                   namespace:   [10, 846],
                   suggest:     ''
                },
                success: function(data) {
                    $('#target').html(data);
                }
            });

        </script>
    </body>
</html>

これは表示されます:

array (
  'action' => 'opensearch',
  'search' => 'test',
  'namespace' =>
  array (
    0 => '10',
    1 => '846',
  ),
  'suggest' => '',
)

あなたの主な間違いは、データを json としてPOSTdataTypeすると考えていることですが、実際にはコンテンツが取得するEXPECTEDデータを定義します (コールバックを呼び出すときに既にデコードされたオブジェクトを持つため)。dataType

于 2012-12-07T21:35:30.663 に答える
0

受信したデータをログに記録して、受信した内容を確認してください。次のコードを使用して ajax 投稿をテストしたところ、必要に応じて値 10 が返されます。

   $data = $_REQUEST;
   error_log($data['namespace'][0]."\n",3,"log.txt");
   print_r($data['namespace'][0]);

また、エラー オプションと成功オプションを使用して、php スクリプトから得られる応答を確認します。

   $.ajax( {
   url: 'rec.php',
   data: {
      action:  'opensearch',
      search:  "abc",
      namespace:   [10, 846],
      suggest:     ''
   },
   dataType: 'json',
   error: function (XMLHttpRequest, textStatus, errorThrown) {
    console.log(JSON.stringify(XMLHttpRequest));
    console.log(JSON.stringify(textStatus));
    console.log(JSON.stringify(errorThrown));

  },
  success: function (data) {
   console.log(JSON.stringify(data));
 }
 });
});
于 2012-12-07T21:36:27.053 に答える
0

フォームデータを送信しているため、json_encoded にはなりません。

$.ajax( {
    url: someUrl,
    data: {
        json_string: JSON.stringify({
            action:  'opensearch',
            search:  query,
            namespace:   [10, 846],
            suggest:     ''
        })
    },
    dataType: 'json',
});

そしてPHP側

$data = json_decode($params['json_string'], true);
于 2012-12-07T21:42:01.677 に答える