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」である必要がありますが、空欄に戻ります。
JSON.stringify
とjson_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;
?>
$_POST
は、リクエストの本文が標準のurlencode形式ではない場合は入力されません。
代わりに、 読み取り専用php://input
stream このように生のリクエスト本文を取得します:
$value = json_decode(file_get_contents('php://input'));
連想配列が必要な場合は、2番目の引数をtrueとして渡します。そうでない場合、オブジェクトを返し続けます。
$value = json_decode(stripslashes($_POST),true);
試してください:
echo $value->page;
json_decode
のデフォルトの動作は、stdClass
型のオブジェクトを返すためです。
または、2番目のオプションの$assoc
引数をtrue
に設定します。
$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
JQueryはurlencoded形式でjavascriptオブジェクトをエンコードし、$ _ POSTに入力されるようです。少なくとも 例 から。オブジェクトを文字列化せずにpost()
に渡してみます。
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
?>