揮発性のメモ2

知識をメモ書きしておく

$.ajax()を使って phpに数字と文字列を送信する

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"
    });
  }