Skip to content

Lift CSS SelectorとAjax

Lift CSS SelectorとAjax published on Lift CSS SelectorとAjax へのコメントはまだありません

相変わらずボチボチLiftを触ってる。Lift 2.2 M1から入った便利な機能として、CSS Selectorがある。詳しくはWikiの該当のエントリを見てもらうとして、それとAjaxを組み合わせる方法。

■環境

Lift 2.2

■やりたい事

<form>タグを使った例はSimply Liftの4.8に載っているんだけど、普通のボタン(ajaxButton)を使いたかった。

DBのテーブルよりデータを取得して、HTMLの表にして出力。各行についているボタンをクリックすると、その行のデータに対する何らかの処理が行われるようにしたい。

結論から言うと簡単。

Continue reading Lift CSS SelectorとAjax

LiftのFormが勝手にAjax用に・・・

LiftのFormが勝手にAjax用に・・・ published on LiftのFormが勝手にAjax用に・・・ へのコメントはまだありません

Liftは色々便利っぽいんだけど、日本語の情報が少ない。というか英語の情報すら少ない。

つい最近はまった事。Liftのフォームで、通常通りSnippetに情報を渡して次の画面に遷移して欲しい所なのに、勝手にAjaxのフォームになってしまう。

Continue reading LiftのFormが勝手にAjax用に・・・

LiftでAjax

LiftでAjax published on LiftでAjax へのコメントはまだありません

引き続きLiftの勉強中。Liftを含め最近のフレームワークだとAjaxなんてあまり意識せずに簡単に扱えるようになってるらしい。

"lift ajax"で検索すると色々ヒットするけど、とりあえず参考にしたのは以下の2つ。ま、Scalaを触っていてこの人達にブログにヒットしない事はないって位な有名なやつ。

Continue reading LiftでAjax

evalと構文エラー

evalと構文エラー published on evalと構文エラー へのコメントはまだありません

AJAXでは、以下のようにサーバーから返されたJSONをevalで元に戻すみたいな事を良くやると思う。

var result = eval("(" + responseText + ")");

サーバー側で何らかのエラーが発生して、responseTextにエラーメッセージが書かれてたりすると以下のようなエラーが発生する。

エラー: 構文エラーです。

最初は「構文的には何もおかしくないんだけどなぁ…」と結構悩んだけど、そこに書かれているJavaScriptの構文ではなくて、evalしている文字列がJavaScriptの構文じゃないって事だって分かった時は少し感動。

JoomlaでJSON出力

JoomlaでJSON出力 published on JoomlaでJSON出力 へのコメントはまだありません

自分用メモ。

JoomlaでJSON出力する方法。Joomlaのドキュメントページより。

PHPではjson_encodeを使って出力するだけ。HTTPレスポンスのヘッダも変えてるか。

JavaScript側の処理に関しての注意点はこちらのページが分かりやすい。MooTools 1.2 だとJSON.decodeというのが使えるみたいだけど、Joomla 1.5に付属のMooTools 1.1では使えないっぽい。

(追記) MooTools 1.1のドキュメントの場所を教えてもらった。MooToolsのページから探しても見付からなかった・・・

ViewでHTMLではなくXMLを出力

ViewでHTMLではなくXMLを出力 published on ViewでHTMLではなくXMLを出力 へのコメントはまだありません

Joomlaのコンポーネントの話。MVC形式の場合、一般的にはviewはview.html.phpというファイル名で、そこでtemplateを読み込んで表示する、と言う流れになる。

html以外、例えばAJAXなどでXMLを表示したい場合のやりかた。

Controllerへの引数にformat=xmlというのを渡すと、view.html.phpではなくてview.xml.phpが呼ばれる。
HTMLヘッダーのmime typewを正しく設定するには、Controllerの中で以下のようにすれば大丈夫っぽい。

$doc =& JFactory::getDocument();
$doc->setMimeEncoding('application/xml');
$doc->setType('xml'); 

ここここら辺を参考にした。

IEのXMLHttpRequestでコネクションを閉じない

IEのXMLHttpRequestでコネクションを閉じない published on IEのXMLHttpRequestでコネクションを閉じない へのコメントはまだありません

Ajaxが一般的になってきたけど、構築中のシステムでIEのXMLHttpRequestに関するバグ(あるいは控えめに言っても問題点)に悩まされた。
問題の概要はここのページに簡潔に書かれているけど、一応書いてみる。
前提として、IEのデフォルトではHTTPの同時接続数が2。
1.あるページがwindow.openで子ウィンドウを開く。
2.子ウィンドウがXMLHttpRequestでサーバーに問い合わせ。(HTTPの接続数のカウンタが+1)
3.サーバーから返答が返ってくる前に子ウィンドウを閉じる。(HTTPの接続数のカウンタが減らない
4.1〜3を繰り返すとHTTPの同時接続数の上限(2)に達し、それ以降のAjaxリクエストを行わなくなる。
解決策
・親ウィンドウも含め、全てのIEのウィンドウを閉じれば、次からは問題なし(消極的な解決策)
・レジストリで同時接続数を増やす(推奨されてない→MSのページ
・サイトの構成を見直す(子ウィンドウからAjaxを使用しない等)
子ウィンドウのoncloseで、abort()メソッドを呼び出すというのを試した人もいるけど、問題は解決しなかったみたい。英語だけどこのページ
IE+Ajaxに関する注意事項を集めたページ(英語)