XMLHttpRequest Level 2(XHR2)による次世代Ajax通信 (3/5)
作成:2013-02-24 10:06
更新:2013-02-24 10:06
更新:2013-02-24 10:06
■バイナリデータのアクセス
XHR2の新機能の中でも注目すべきは「テキスト以外のデータ形式のサポート」でしょう。XHR2では、responseTypeにより、送信されるデータの種類を指定できます。この、responseTypeプロパティでは、以下のものが利用できます。
text――標準テキストです。単純なテキストをやり取りするのに用います。
json――JSON形式のテキストです。いくつかの値を構造化したデータに用います。
document――Documentオブジェクトデータです。Webのドキュメントを扱うのに用います。
arraybuffer――バイナリデータ配列です。各種バイナリデータを利用するためのものです。
blob――ファイルデータを扱うBlobオブジェクトデータです。各種のファイルを扱うためのものです。
バイナリデータを利用する場合、arraybufferかblobを利用することになるでしょう。また複雑なデータはjsonで送受するのがよいでしょう。
ここでは、一番馴染みのないblobを利用するサンプルを挙げておきます。下のリストは、image.jpgというイメージを読み込み画面に表示する例です。まず受信するイメージの種類を指定しておきます。
ArrayBufferやBlobは、ちょっと馴染みのないデータ形式なので戸惑いますが、基本的な使い方がわかれば、XHR2と組み合わせてバイナリデータやファイルを簡単にやり取りできるようになります。
text――標準テキストです。単純なテキストをやり取りするのに用います。
json――JSON形式のテキストです。いくつかの値を構造化したデータに用います。
document――Documentオブジェクトデータです。Webのドキュメントを扱うのに用います。
arraybuffer――バイナリデータ配列です。各種バイナリデータを利用するためのものです。
blob――ファイルデータを扱うBlobオブジェクトデータです。各種のファイルを扱うためのものです。
バイナリデータを利用する場合、arraybufferかblobを利用することになるでしょう。また複雑なデータはjsonで送受するのがよいでしょう。
ここでは、一番馴染みのないblobを利用するサンプルを挙げておきます。下のリストは、image.jpgというイメージを読み込み画面に表示する例です。まず受信するイメージの種類を指定しておきます。
xhr.responseType = 'blob';そしてデータを受信したら、それをもとにURLを生成して<img>タグのsrcに設定します。
document.querySelector("#img").src =これでおしまい。信じられないくらいに簡単にイメージファイルをやりとりできます。ちなみに、参考例としてarraybufferを利用した場合の処理も挙げておきました。responseTypeをarraybufferにしておき、受信した後でちょっとした処理をします。
window.URL.createObjectURL(this.response);
var blob = new Blob([this.response], {type: 'image/jpg'});ArrayBufferは、文字通りバイナリデータを扱うものです。ここでは、ArrayBufferからBlobオブジェクトを作成して利用しています。ArrayBufferからBlobへの変換はこのように簡単にできます。
document.querySelector("#img").src =
window.URL.createObjectURL(blob);
ArrayBufferやBlobは、ちょっと馴染みのないデータ形式なので戸惑いますが、基本的な使い方がわかれば、XHR2と組み合わせてバイナリデータやファイルを簡単にやり取りできるようになります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※Blobによるイメージファイルの受信 <!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 xhr = new XMLHttpRequest(); xhr.open('GET', '/image.jpg', true); xhr.responseType = 'blob'; xhr.onload = function(e) { if (this.status == 200) { document.querySelector("#img").src = window.URL.createObjectURL(this.response); } }; xhr.send(); } </script> </head> <body> <header> <h1>XHR2 Sample</h1> </header> <article> <p id="msg"></p> <img id="img" src="" /> <button onclick="doAction();">Click</button> </article> </body> </html> ※ArrayBufferを利用する場合 function doAction(e){ var xhr = new XMLHttpRequest(); xhr.open('GET', '/image.jpg', true); xhr.responseType = 'arraybuffer'; xhr.onload = function(e) { if (this.status == 200) { var blob = new Blob([this.response], {type: 'image/jpg'}); document.querySelector("#img").src = window.URL.createObjectURL(blob); } }; xhr.send(); }
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る