1

JqueryでJSONアラリーを作成し、それをphpに送信しています。PHPでデコードしましたが、エラーメッセージが表示されます。以下は、phpで到着する配列のエコーとエラーメッセージです。注:渡したアイテムは1つだけです(小さくするためですが、さらに配列にはさらに多くのアイテムがあります:

ここに画像の説明を入力してください

これは現在のPHPコードです。

    print_r($_POST['cropData']);
    $cropData = json_decode($_POST['cropData']);
    print_r($cropData);

また、json配列を生成するためのjqueryは次のとおりです。

      jsonArray[thumbNum] = [{'src':val.attr('src')},
                            {'width':val.width()},
                            {'height':val.height()},
                            {'dataCX':val.attr('data-cx')},
                            {'dataCY':val.attr('data-cy')},
                            {'dataCW':val.attr('data-cw')},
                            {'dataCH':val.attr('data-ch')}
      ]
      thumbNum++;
    }

    $.post('scripts/php/join_processing.php', {
      'cropJoin': '1',
      'cropData': jsonArray},               
      function(data) {

私がここで間違っていることについて何かアドバイスはありますか?不正な形式のJSON配列を送信しているのですか、それとも正しくエンコードされていませんか?

どうも

4

4 に答える 4

0

あなたはそれをデコードする必要はありません-それはすでに配列です。どうぞお気軽にご利用ください。

$.postjson文字列としてではなく、配列として渡します。

于 2012-09-18T23:11:43.223 に答える
0

JavaScriptの配列は、PHPの配列とは異なります。JS配列を送信するのではなく、JSオブジェクト(PHP配列に変換されます)を送信することを意味している可能性があります。

代わりにこのコードを試してください...

jsonArray[thumbNum] = {
  src: val.attr('src'),
  width: val.width(),
  height: val.height(),
  // ..
};

大まかに次のようにphpオブジェクトに変換されますが:

array(
  array(
    "src" => "",
    "width" => "",
    "height" => ""
  ), array(
    "src" => "",
    "width" => "",
    "height" => ""
  )
);

$ .postがあなたのためにそれを適切に変換するので、他のポスターもあなたが本当にすべてに必要ではないということは正しいです。json_decode

于 2012-09-18T23:14:13.820 に答える
0

実際には、そこでJSON配列を作成しているわけではありません。JSONは、配列を表すことができる文字列表記です。実際には、通常のJavaScript配列を作成しています。$.postこれをPHPスクリプトに適切に渡すため、$_POST正しく入力されます。json_decodeまったく必要ありません。

于 2012-09-18T23:14:34.500 に答える
0

jQuery.post()のデータパラメーターは「インテリジェントな推測」であるため、jQuery.post()のデータパラメーターとしてJSON文字列またはJSオブジェクトを渡すと、既にHTTPPOST配列として投稿されます。単一のjson文字列の代わりに。したがって、phpで受け取っているものはすでに使用可能な配列であるため、デコードする必要はありません。

ところで; POST変数をprint_rし、文字列ではなく配列として出力するので、これは簡単にわかります。

于 2012-09-18T23:15:28.327 に答える