JSで作った多次元配列をPOSTでPHPに渡す方法
JavaScriptで作った多次元連想配列をPOSTでPHPに渡そうと思って以下のように書いた。
var data = $('fieldset');//複数のfieldset
var schedule_data = [];
schedule_data[] = [];
for(i=0; i < data.length; i++) {
schedule_data[i]["mon"] = $(data[i]).find(".mon").val();
schedule_data[i]["tue"] = $(data[i]).find(".tue").val();
schedule_data[i]["wed"] = $(data[i]).find(".wed").val();
schedule_data[i]["thu"] = $(data[i]).find(".thu").val();
schedule_data[i]["fri"] = $(data[i]).find(".fri").val();
schedule_data[i]["sat"] = $(data[i]).find(".sat").val();
schedule_data[i]["sun"] = $(data[i]).find(".sun").val();
}
$('#schedule_data').val(schedule_data);//hiddenに格納
しかしこれが大誤算だった。
PHP側で、
$_POST["schedule_data"]
なんて気軽に取ろうと思ったら、
なんと中身が無い!(展開すると”,,,”って出る。)
どうやらPOSTの仕様上多次元配列は取れないらしい。
連想配列を使わなくても同じ結果に。
それならばjQueryでJSON化して渡そうと、
$.ajax({
url: "/schedule.php",
dataType: 'text',
type:"POST",
data: {
"schedule_data": schedule_data
}
});
これも同じ結果。
だがこちらは連想配列を使わなければ綺麗に値が入った!
しかし連想配列をどうしても使いたい。
そこで調べた結果出てきたエントリーがこれ。
http://bakabaka.net/blog/archives/post-327.html
nameに多次元配列のハッシュを持たせればなんとか取れそう。
早速以下のようにhiddenを作ってみると、
$('<input>').attr({type:'hidden',name:'schedule_data[' + i + '][mon]',value:$(data[i]).find(".mon").val();}).appendTo('#form');
$('<input>').attr({type:'hidden',name:'schedule_data[' + i + '][tue]',value:$(data[i]).find(".tue").val();}).appendTo('#form');
...以下略
PHPでjson_encode。
json_encode($postValue["schedule_data"]);
結果。
[{"mon":"","tue":"1","wed":"1","thu":"1","fri":"","sat":"","sun":""},
{{"mon":"","tue":"","wed":"","thu":"","fri":"","sat":"","sun":""}]
素晴らしい!!!
ちなみに、
http://d.hatena.ne.jp/Fivestar/20080518/1211125500
こんなエントリーもありましたが、
params = {
'A[a1]': 'a1',
'A[a2]': 'a2',
'B': 'b'
}
これの作り方が分からず投了。
最近のコメント