AJAX(JSON)
コントローラのメソッドから辞書を返すことによって、ブラウザにどのデータを表示するかをTurboGearsに動的に決定させることができます。たいていはHTMLを返したいのではないでしょうか。
モダンなインタラクティブなウェブアプリケーション( "AJAX" )を作るとき、JavaScriptによって使用できるフォーマットでデータを送りたいと思います。モダンブラウザがある程度XMLをサポートしている一方で、JavaScriptに関してはサポートの幅やスピードに差があります。
こういったことから、軽量な JSON フォーマットはいい選択です。このフォーマットはJavaScriptネイティブであるため、すべてのブラウザで動作しますしかつ高速です。
TurboGears?は返される辞書をJSONに適切な形にコンバートしますので、メソッドからJSONを返すのは簡単です。これはアプリケーションが、ブラウザベースのインターフェイスに加え、利用可能なAPIを得ることができるということを意味しています!
exposeされたメソッドすべてからJSONを得て欲しくないかもしれませんので、TurboGearsはデフォルトでJSONを使用不可にしています。これを可能にするためには:
- 特定のメソッドに @expose("json") を付与する
- こうすることでJSONを返すためにこのメソッドを呼ぶことができるようになり、アプリケーションにピュアなJSONインターフェイスが備わります。
- expose() デコレータに allow_json=True をセットする
- リクエストが tg_format=json パラメータと共にやって来ると、TurboGearsはJSONの変換をします。このパラメータが無い場合はテンプレートはふつうに処理されます。これはダイレクトなウェブインターフェイスと付加的なJSONインターフェイスの両方を提供するときに便利です。特にウェブアプリケーションの "発展的拡張" をしたい人には良い選択です。
- app.cfg に tg.allow_json=True をセットする
- これは上記のオプションと同じ振る舞いをしますが、すべてのメソッドに tg_format=json を許します。これを制限するためには expose() に allow_json=False を引数として加えます。
すべてのイベントでJSONを、利用可能なオブジェクトに変換するためには、ブラウザでこれをただ eval() すればいいのです。これでデータのハッシュテーブルを得ることができ、使う準備OKです。MochiKitは便利な loadJSONDoc 関数を提供してくれます。これはサーバにXMLHttpRequestを送り、 eval されたオブジェクトを返してくれます。

