Ajaxによる非同期通信 (5/5)
作成:2010-04-14 12:43
更新:2010-05-12 08:27
更新:2010-05-12 08:27
■Ajaxでフォームを送信する
多くのデータをサーバーに送る場合、通常はフォームを用意して送信します。Ajaxの場合、フォームを使った送信は使いません。……が、この「フォーム」というインターフェイスそのものは、便利ですし、みんなになじんたものですから、Ajaxでもそのまま利用できれば便利ですよね?
jQueryでは、フォームの「シリアライズ」という機能をもっています。これは、フォームの内容をテキストに変換する機能です。テキスト? そう、つまり「フォームが実際に送信されるときの形式に従ったテキスト」として取り出すためのものなのです。
Webというのは、HTTPというプロトコルでデータをやり取りしていますが、これはすべてテキストでデータを送受するようになっています。フォームを送信するときも、Webブラウザがフォームの内容をHTTPで送信する形式(←これがテキスト)に変換してサーバーに送っているわけです。これと同じようにして、フォームの内容をテキストにしてパラメータに設定し、Ajax送信すれば、フォームの内容をまるごと送ることができます。
この「フォーム内容をテキストに変換する」作業を、シリアライズといいます。これは以下のようにして行います。
では、簡単な例を上げておきましょう。<select>のメニューと、<input type="text">の入力フィールドを持ったフォームを用意し、これをAjaxでサーバーに送信してみます。サーバー側では、受け取ったフォームの内容を元に、送り返すデータを用意し、それをJSON形式で送り返します。
jQueryでは、フォームの「シリアライズ」という機能をもっています。これは、フォームの内容をテキストに変換する機能です。テキスト? そう、つまり「フォームが実際に送信されるときの形式に従ったテキスト」として取り出すためのものなのです。
Webというのは、HTTPというプロトコルでデータをやり取りしていますが、これはすべてテキストでデータを送受するようになっています。フォームを送信するときも、Webブラウザがフォームの内容をHTTPで送信する形式(←これがテキスト)に変換してサーバーに送っているわけです。これと同じようにして、フォームの内容をテキストにしてパラメータに設定し、Ajax送信すれば、フォームの内容をまるごと送ることができます。
この「フォーム内容をテキストに変換する」作業を、シリアライズといいます。これは以下のようにして行います。
変数 =《フォームのjQuery》.serialize();$(フォーム).serialize();というように、フォームのjQueryオブジェクトのserializeを呼び出すことで、そのフォームに用意されたコントロール類の値をすべてシリアライズしたテキストが取得されます。後は、これをパラメータとしてサーバーに送ればいいのです。
では、簡単な例を上げておきましょう。<select>のメニューと、<input type="text">の入力フィールドを持ったフォームを用意し、これをAjaxでサーバーに送信してみます。サーバー側では、受け取ったフォームの内容を元に、送り返すデータを用意し、それをJSON形式で送り返します。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※サーバー側のスクリプト <?php $data =array( array(message=>'ごめん、ない。', color=>'#666666', background=>'#AAAAAA'), array(message=>'最初のデータです。', color=>'red', background=>'#FFCCCC'), array(message=>'次のデータです。', color=>'green', background=>'#CCFFCC'), array(message=>'最後のデータです。', color=>'blue', background=>'#CCCCFF') ); $id = $_GET['id'] * 1; if ($id < count($data)){ $result = $data[$id]; $result['message'] .= "<br>" . $_GET['msg']; } else { $result = $data[0]; } header('Content-type:application/json; charset=utf8'); echo json_encode($result); ※Webページのソースコード <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="jquery-1.4.2.min.js"></script> <script type="text/javascript"> <!-- function doAction(){ var str = $('#form1').serialize(); $.getJSON('getdata.php',str,callback,"json"); } function callback(result,status){ $('#message').css('color',result.color); $('#message').css('background',result.background); $('#message').html('受信データ:' + result.message); } //--> </script> </head> <body> <H1>TEST.</H1> <div class="msg" id="message">テキストをここに表示します。</div> <form id="form1" onsubmit="return false;"> <select name="id"> <option value="0">-</option> <option value="1">1番目</option> <option value="2">2番目</option> <option value="3">3番目</option> </select><br> <input type="text" name="msg"> </form> <input type="button" onclick="doAction();" value="Click"> </body> </html>
※関連コンテンツ