jQuery、$.postでPHPの配列を送信

ブログ | 2009/3/14 01:33
HTML
<script type="text/javascript" src="jquery.js"></script>
<form id="frm" onsubmit="send();return false">
 <input type="text" name="test[]" />
 <input type="text" name="test[]" />
 <input type="submit" value="送信" />
</form>

Javascript
function send(){
 var url = 'xxx.php';
 var params = $('#frm').serialize();
 $.post(
   url,
   {params:params},
   function(data,status){
     if(status == 'success'){
       alert(data['arr'])
     }
   },
   'json'
 );
}

PHP
parse_str($_POST['params'],$_POST);
$json['arr'] = print_r($_POST,true);
echo json_encode($json)

[ポイント解説]
普通にやると、test[]みたいのが送信できない。
で、{params:params}なんて書く。
で、PHPで、parse_str($_POST['params'],$_POST);
とする。

知らなかったのだけれど、
print_r($_POST,true);
なんてすると、値を返してくれるらしい。

この例では、jsonを使ってみているけれど、dataTypeは、(xml,html,script,json,jsonp,text)がある。

[参考]
http://stacktrace.jp/jquery/api/ajax/
http://stackoverflow.com/questions/304518?sort=n...

▼追記 2010/1/21 13:22
parse_strは、'や"がエスケープされるようだ。
で、それがうまくない時は、parse_strの後に
array_walk_recursive($_POST, create_function('&$v', '$v = stripslashes($v);'));
を追加。
参考になりました!
serialize()の代わりにserializeArray()を使うと、フォームの内容でJSONオブジェクトを作れるので
これを送信すればPHP側でparse_str()する必要がないようです。
しげる | 2009/11/01 13:18
kuwa
試行錯誤で、serializeArray()も検討したのですが、
arr['name'] = キー
arr['value'] = 値
という形式が、ちょっと面倒な印象がありました。

parse_strで
arr[キー] = 値
に一発で変換できるserialize()がいいかなと。
kuwa | 2009/11/04 12:03
Darlene Goodwin | 2017/08/01 00:08
Bruce Aaron | 2017/08/07 05:49
縮小 拡大

ログインしておくと、後で編集が可能です。

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close