a = "1"; // 文字列 b = 2; // 数値
これをajaxでサーバに送信し、PHP側で文字列、数値としてきちんと受け取りたい。
クエリとして ?a=1&b=2 みたいに書き直されてから送信されるので、全部文字列にされてしまう
function sendjson(url){ $.ajax({ url : url, data : {a:"1", b:2} }); }
<? var_export($_REQUEST['a']); // '1' var_export($_REQUEST['b']); // '2' どっちも文字列になっちゃう
JSON文字列にした上でPOSTし、PHP側で標準入力から読んでデコードすると良いらしい
function sendjson(url){ $.ajax({ url : url, data : JSON.stringify( {a:"1", b:2} ), // 文字列化 type : "POST" // POST送信(=標準入力に食わせる) }); }
<? $json = file_get_contents("php://input"); $obj = json_decode($json); var_export($obj); // stdClass::__set_state( array('a'=>'1', 'b'=>2,) ) やったぜ
参考:JqueryからPHPへJSONを渡すには - Hope is a Dream. Dream is a Hope.
他の変数もいっしょに渡すことを考えると変数に入れた方がいいので、こうしてみたが、うまくデコードできない
" が \" にエンコードされ、それがさらに \\" とエンコードされている?
function sendjson(url){ $.ajax({ url : url, data : {json:JSON.stringify( {a:"1", b:2} )}, type : "POST" }); }