
連載:Ajaxで作るインタラクティブWebアプリケーション
(3)
JSONによるデータ通信でAjaxアルバムを完成させる
田中 孝太郎
dotimpac.to
2006/3/17
| PrototypeのAjaxオブジェクト |
続いて、JavaScript側の通信処理を見ていこう。今回はphotoalbum.jsの一部のみを変更しており、大部分は前回のスクリプトと同様である。
if(item) { |
- - PR -
XMLHTTPの通信処理のための機能は、PrototypeでAjaxオブジェクトとして用意されている。XMLHTTPRequestはブラウザによって実装が異なり、処理を切り替えなければならないのだが、Prototypeの機能を使えば、互換性を意識せずに簡単に非同期通信を行うことができる。今回は通常のリクエストである「Ajax.Request」を使用するが、データを部分更新するような場合には、更新要素のidを指定すれば通信後自動的にデータを更新してくれる「Ajax.Updater」を使用すると便利だ。
Ajax.Requestに、urlとオプションを渡してやることで通信を行う。オプションにリクエストのパラメータ、成功時、エラー時などの処理を関数オブジェクトで渡すことで、取得したデータの処理やエラー処理をすることができる。この辺りの書式は、これまでのscript.aculo.usのエフェクトなどでの処理とほぼ同じである。
「onComplete」がリクエスト成功時の処理だ。引数にXMLHTTPのリクエストオブジェクトが格納されている。「responseText」プロパティに応答内容のJSONが含まれているため、この文字列をオブジェクトに変換し、配列に格納している。evalには式を渡す必要があるため、リテラルであるJSONをカッコでくくって
|
var items = eval( '(' + response.responseText + ')' ); |
とし、JSONをオブジェクトに変換している(ちなみに、JSONのプロパティの末尾などに余計なカンマが入っていると、このevalでIEにのみエラーが発生する。このバグはよく発生する割に見付けにくいので注意しよう)。
cgiで出力するJSONは、前回まででJavaScriptで用意していたダミーデータと同じ形式にしておいたので、JSONをオブジェクトにしてからの処理は前回までとまったく同様である。このように、Prototypeのようなライブラリを使えば、Ajaxの非同期通信自体はまったくなんの苦労もなく実現できることが分かるだろう。
| AjaxPhtoAlbumの完成 |
前回までのように、今回のサンプルの動作デモも、通信もふくめてここでご覧いただければよかったのだが、諸事情でそれができなかった。Rubyのサーバ環境があればサンプルをアップロードして実行してみてほしい。前回までと違い、アルバム名をクリックすると通信中のスピナーが表示され、データを取得してからアルバム画像が表示されるのが分かるはずだ。データディレクトリに画像ファイルの入ったディレクトリを追加すればアルバムを追加することができるので、ここまで来れば十分実用的なWebアプリケーションといえるのではないだろうか。
サンプルでは扱わなかったが、筆者の開発しているPhtoAlbumアプリpiccyでは、タグウィンドウへのドラッグ&ドロップ機能、タイトルやコメントの編集機能なども盛り込まれている。これらの機能もPrototypeやscript.aculo.usを利用して実装されている。JavaScriptライブラリを使用して処理を追加し、Ajax.requestなどの通信処理も追加した上でサーバ側でのデータ格納処理を書けば、サンプルと同様に機能追加できるはずだ。もし実現してみたい機能やデザインがあれば、これをベースに改良してみてほしい。
| 最後に |
AjaxPhtoAlbumが完成したところで、本連載は終了となる。基本的に本連載では「有用なJavaScriptライブラリを使えば、Ajaxはさほど大変ではない」ということをいいたいと思っていたが、JavaScript自体になじみがないと難しかったかもしれない。しかし、現在のAjaxの流行は、JavaScriptの言語としての生産性の高さも証明しているのではないだろうか。個人的には、去年まで誰もが忘れていたというのが信じられないほど、便利な言語だと思っている。
JavaScriptの勉強として、ライブラリを使ってAjaxに手を付けてみるというのは、かなり良い選択肢のはずだ。興味があればぜひチャレンジしてみてほしい。
| 3/3 | ご愛読ありがとうございました |
|
INDEX |
||
| Ajaxフォトアルバムのフェードイン画像フレームを作ろう | ||
| Page1<PhtoAlbumを完成させよう> Ajaxの「非同期」とは非同期通信ではない/JavaScriptライブラリの最新状況 |
||
| Page2<通信機能を搭載したPhtoAlbumサンプル>
JSONによるデータ通信/指定要素の位置まで画面をスクロールするエフェクト |
||
| Page3<PrototypeのAjaxオブジェクト> | ||
AjaxでつくるインタラクティブWebアプリケーション バックナンバー
- 第1回 Ajaxフォトアルバムのフェードイン画像フレームを作ろう
- 第2回 ズーミングできるWebフォトアルバムウィンドウを作ろう
- 最終回 JSONによるデータ通信でAjaxアルバムを完成させる
AjaxとPHPでリッチクライアント
Ajaxを扱うためのサーバーサイドのPHPライブラリを紹介する。リリースされたライブラリ、AjaxACを活用して好みの検索窓に改造してみよう
Ajax うきうき Watch
Ajaxという流行技術の定義を明確にしながら、Ajaxの動向からうきうきするような面白いもの、確実に押さえておきたいものを厳選してお届けしていく
- 第1回 Webアプリのユーザビリティを改善しまくるAjax
- 第2回 Ajax、それはWeb 2.0へと続く道
- 第3回 どんなに無茶をやっても「それもありかな」なAjax
- 第4回 自動車業界のAjaxを活用したキャンペーンを目撃せよ
- 第5回 “どのブラウザでも動くAjax”を共有財産として育てよう
- 第6回 プロプライエタリ2.0から考えるAjaxの公開/非公開部
- 第7回 メモリリークが小さくなったGoogle Maps APIの新版
- 第8回 “CGUI” 消費者が作り出すUIの時代突入
- 第9回 巨大化するAjaxライブラリをシンプルにする新たな流れ
- 第10回 地図のように年代を移動できるMITのAjax歴史年表
- 第11回 JSONがRFCになり、どんどんこなれるAjaxサービス
- 第12回 サーバが通信を開始できるComet活用Webチャット
- 第13回 オンラインゲームで検索精度を上げるGoogleの巧みさ
- 第14回 IE7とFirefox 2への利用者の大移動は起こるか?
- 第15回 グーグル検索エンジンを特定ジャンル専用に、Co-op
- 第16回 帯域やデバイス領域をフル活用させる“モバイルAjax”
- 第17回 新しい技術を模索するYahoo!、Google、MS
- 第18回 Ajaxの高度な使用例、Yahoo! pipes
- 第19回 Apollo参戦でウィジェット開発者の争奪戦が激化
- 第20回 Twitter登場で注目されるRTコミュニケーションツール
- 第21回 過熱するTwitterブームとMicrosoftのマッシュアップ
- 第22回 iPhoneのAjax戦略、そして今日もWeb APIは増加する
- 第23回 Ajax開発者がヒーローになるとき、それはいま!
- 第24回 携帯電話への拡張を進めるGoogleとWeb隠しコマンド
- 第25回 Ajaxで加速!? エンタープライズ2.0とWebOSの普及
- 第26回 「言葉」を超えた説得力を持つAjaxの存在感と広がり
- 第27回 ゲームから読み解く、俺スクリプト時代の知的な挑戦
- 第28回 マッシュアップ元年が終わり、2008年はどうなる?
- 第29回 Twitterやクラウドへも分岐するAjax/Web APIの道
- 第30回 Ajaxはじめて物語、そしてサーバでも動くJavaScript
- 第31回 新ブラウザ戦争はon fireだがJavaScriptはoffのナゾ
- 第32回 Google App EngineはAjaxへのハードルを下げるか?
- 最終回 Pure JavaScriptの動画再生やRPGも好きでした
| 古くて新しいAjaxの真実を見極める 「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう 最終更新 2005/8/2
|
||
TechTargetジャパン
- 次のモバイルアプリはどのフレームワークで作る? (2012/5/24)
スマホアプリの開発を容易にするJavaScriptのフレームワークが続々と増えている。それぞれの良さや仕組み、何がどこまでできるのかを徹底解剖する - 「LESS&専用エディター」でCSSをシンプルに書こう (2012/5/23)
「LESS」はCSS初心者に向けた、シンプルなライブラリだ。「LESS」で、変数などのプログラミングの基礎的な考え方もCSSで学ぼう - 学校が世界一のデジタル環境になったら (2012/5/18)
授業はアーカイブに蓄積され、家からも見られる。家族が授業テーマのアイデアを出す。そんな姿が実現されるかもしれない - 1000万ドル調達も夢じゃないクラウドファウンディング (2012/5/15)
クラウドファンディングは、寄付型でも投資型でもない「購入型」が主流。商品を“開発する前に販売”して開発費用を集める逆転のシステムだ
|
|
