前回のエントリに関して、MM/Memoで、「うーん、便利なのかなー。perl(とかのサーバサイド)コード中にjavascriptが混ざるのって嫌な気がするけど。」と書いている方がいらっしゃったのですが、ちょっと勘違いをされているような気がします。自分でJavascriptのコードを一切書かずに済ませるための、HTML::PrototypeならびにCatalyst::Plugin::Prototypeですから。
なので、今回は実践編っつーことで、Javascriptを一切書かずにajaxなウェブアプリ(ってほどのものではないけど)をCatalystで作ってみたいと思います。といっても、けんたろさんのCatalyst で作る簡単 Web アプリケーション: Feed2JS 解説で、既にCatalystでajaxで自分ではJavascriptを書いていないという、素晴らしいサンプルがあるのですが、ここではよりシンプルな(しょぼい)サンプルで、「こんなに簡単にajaxできるぜ」ってことを示したいと思います。
$ catalyst.pl Ajax
$ cd Ajax $ ./script/ajax_create.pl view TT TT
lib/Ajax.pmを修正します。修正した部分だけ以下に示します。
use Catalyst qw/Prototype/; sub default : Private { my ( $self, $c ) = @_; $c->stash->{template} = 'default'; $c->forward('Ajax::V::TT'); } sub get : Global { my ( $self, $c ) = @_; $c->res->output('success.'); }
以下の内容のroot/default というファイルを作成します。
[% c.prototype.define_javascript_functions %] <p> This is a sample of ajax web app using Catalyst. </p> <p> [% c.prototype.link_to_remote('click here and you will see the string "success."', { update => 'container', url => '/get', }) %] </p> <div id="container"> </div>
cgiで起動する場合には、以下の様なスクリプトを作成します。
#!/usr/local/bin/perl -w use strict; use lib '/path/to/Ajax/lib'; use Ajax; Ajax->run;
実際にアクセスしてみるとこうなります。リンクをクリックすると、画面遷移せずに「success.」という文字を表示します。
以上で完了です。Javascriptを一切書かずにajaxなウェブアプリが作れる、ということがお分かり頂けたと思います。
xmlHttpRequestで取得したデータを、単純にそのままHTMLにはめ込むだけなので、サーバ側で生成したデータを、Javascript側で何らかの処理をしてからHTMLにはめ込むという用途には使えませんが、単純なajaxアプリであれば十分使えるかと。