XMLHttpRequest Level 2(XHR2)による次世代Ajax通信 (4/5)
作成:2013-02-24 10:08
更新:2013-02-24 10:08
更新:2013-02-24 10:08
■フォームデータの送信
ちょっと変わったところで、「フォームの送信」を行わせてみましょう。最近では、サーバーとのやり取りはすべてAjaxを利用する形になりつつあります。フォームの送信も、Ajaxを使ってページ遷移なしに処理できるようにしたほうがスマートですね。
フォームの送信は、送信用のデータとして「FormData」というオブジェクトを作成します。これは、文字通りフォームの情報を管理するためのものです。このオブジェクトを作成し、そこにフォームに用意する値を追加していきます。
・オブジェクトの作成
・フォームデータの追加
こうして必要なだけデータを追加したら、XHR2でsendする際に引数としてFormDataオブジェクトを渡してやればいいのです。
実際の利用例を下にあげておきましょう。ここではid, name, passwordといった項目を作成して送信しています。ページを見ればわかることですが、ページ自体にはフォームはありません。FormDataさえあれば、フォーム送信をXHR2で行えるのです。
実際にフォームを送信する場合は、appendでフォーム内の各値を追加する必要はありません。<form>タグのDOMオブジェクトを取得し、それを引数に指定してnew FormDataすればOKです。例えば、
(※ちなみに、このFormDataは、XHR2専用ではなく、従来のXHRでも使うことができます)
フォームの送信は、送信用のデータとして「FormData」というオブジェクトを作成します。これは、文字通りフォームの情報を管理するためのものです。このオブジェクトを作成し、そこにフォームに用意する値を追加していきます。
・オブジェクトの作成
変数 = new FormData();
・フォームデータの追加
《FormData》.append( 名前 , 値 );
こうして必要なだけデータを追加したら、XHR2でsendする際に引数としてFormDataオブジェクトを渡してやればいいのです。
実際の利用例を下にあげておきましょう。ここではid, name, passwordといった項目を作成して送信しています。ページを見ればわかることですが、ページ自体にはフォームはありません。FormDataさえあれば、フォーム送信をXHR2で行えるのです。
実際にフォームを送信する場合は、appendでフォーム内の各値を追加する必要はありません。<form>タグのDOMオブジェクトを取得し、それを引数に指定してnew FormDataすればOKです。例えば、
new FormData(document.querySelector("#form1"));――こんな具合ですね。注意したいのは、フォーム内に用意する入力関係のタグは、必ずname属性を指定しておく、ということです。忘れるとうまく値が取り出せません。
(※ちなみに、このFormDataは、XHR2専用ではなく、従来のXHRでも使うことができます)
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>タイトル</title> <style> h1 { font-size: 18pt; background: #AAAAEE; padding: 5px;} </style> <script type="text/javascript"> function doAction(e){ var formData = new FormData(); formData.append('id', 123); formData.append('name', "tuyano"); formData.append('password', "hoge"); var xhr = new XMLHttpRequest(); xhr.open('POST', '/helo.php', true); xhr.responseType = 'text'; xhr.onload = function(e) { if (this.status == 200) { document.querySelector("#msg").innerHTML = this.response; } }; xhr.send(formData); } </script> </head> <body> <header> <h1>XHR2 Sample</h1> </header> <article> <p id="msg"></p> <button onclick="doAction();">Click</button> </article> </body> </html>
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る