さらに修正
dataTypeに関して大いなる勘違い。
dataTypeはAjaxの返り値の受取方法なので、これは送り先サーバーが値をどのような形式で返答してくるかを設定。
送るデータ形式とは全く関係ない。
データ送信は基本KEY->Val形式 以下の二種類。もしかして配列を入れると自動変換してくれるかも?
data:'&foo=bar1&foo=bar2';
data:{ foo1:'bar1', foo2:'bar2'};
送信でjsonを利用することはまれ。何故なら受け取り側がPOSTやGETというKey->Val形式だから。
data: $('#form').serialize(), //&foo=bar1&foo=bar2 の形式
dataType:'json', //任意
POSTの取得側のロジックは以下のとおり
$data = $_POST;
echo json_encode( array("result" => $data ));
それに対して、何かしらの理由でobj形式の受け渡しが必要な場合(ex:多次元配列)、
JSON.stringify(serializeArray)
をセットで利用するが、その場合、そもそも$_POST
の形式に適合しない。
data: JSON.stringify($('#form').serializeArray()),
dataType:'json', //任意
JSONの取得側のロジックは以下のとおり
$json = file_get_contents('php://input');
$data = json_decode($json, true);
echo json_encode( array("result" => $data ));
かなり悪戦苦闘の末、理解できた
https://teratail.com/questions/44809
dataTypeにjsonは基本使わない、私レベルでは。フォームのデータを送る程度なら?key=val&
形式のserialize
のデータを送る。で二次配列だからこそ$_POST
の形式に沿って取得できる
$('#form').serialize(),
dataType:'text', <= ?
POSTの取得側のロジックは以下のとおり
$data = $_POST;
echo json_encode( array("result" => $data ));
それに対して、何かしらの理由でobj形式の受け渡しが必要な場合(ex:多次元配列)、
JSOS.stringify(serializeArray)
とdataType:json
をセットで利用するが、その場合、そもそも$_POST
の形式に適合しない。
JSON.stringify($('#form').serializeArray()),
dataType:'json',
JSONの取得側のロジックは以下のとおり
$json = file_get_contents('php://input');
$data = json_decode($json, true);
echo json_encode( array("result" => $data ));