web-dev-qa-db-ja.com

$ _POSTのJSONから連想配列を読み取ります

JQueryを使用して、jsonオブジェクトをphpアプリケーションに投稿しています。

jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });

Firebugからプルされたjson文字列は次のようになります

{ "data" : [ { "contents" : "This is some content",
        "selector" : "DIV.subhead"
      },
      { "contents" : "some other content",
        "selector" : "LI:nth-child(1) A"
      }
    ],
  "page" : "about_us.php"
}

PHPでは、これを連想配列に変換しようとしています。

これまでの私のPHPコードは

<?php
$value = json_decode(stripcslashes($_POST));
echo $value['page'];
?>

Ajax呼び出しへの応答は「about_us.php」である必要がありますが、空欄に戻ります。

18
Daniel

JSON.stringifyjson_decodeの使用を避けることができます:

jQuery.post("save.php", dataToSend, function(data){ alert(data); });

そして:

<?php
echo $_POST['page'];
?>

更新:

...しかし、本当にそれらを使用したい場合:

jQuery.post("save.php",  {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });

そして:

<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>
16

$_POSTは、リクエストの本文が標準のurlencode形式ではない場合は入力されません。

代わりに、 読み取り専用php://input stream このように生のリクエスト本文を取得します:

$value = json_decode(file_get_contents('php://input'));
87
Evert

連想配列が必要な場合は、2番目の引数をtrueとして渡します。そうでない場合、オブジェクトを返し続けます。

$value = json_decode(stripslashes($_POST),true);
3
Shakti Singh

試してください:

echo $value->page;

json_decodeのデフォルトの動作は、stdClass型のオブジェクトを返すためです。

または、2番目のオプションの$assoc引数をtrueに設定します。

$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
1
karim79

JQueryはurlencoded形式でjavascriptオブジェクトをエンコードし、$ _ POSTに入力されるようです。少なくとも から。オブジェクトを文字列化せずにpost()に渡してみます。

1
Paul DelRe

JSONデータを連想配列として使用する場合は、次のように試してください。

<?php 

$json = 'json_data'; // json data

$obj = jsondecode($json, true); // decode json as associative array 

// now you can use different values as 
echo $obj['json_string']; // will print page value as 'about_us.php' 


for example: 

$json = { "data" : [ { "contents" : "This is some content",
    "selector" : "DIV.subhead"
   },
   { "contents" : "some other content",
    "selector" : "LI:nth-child(1) A"
   }
  ],
"page" : "about_us.php"
}

$obj = json_decode($json, true); 

/* now to print contents from data */

echo $obj['data']['contents']; 
 // thats all 
?>
0
Mukesh