AjaxPages.jsを使うときのお話
JavaScriptのテンプレートエンジン(?)AjaxPages.jsの注意点。(ajaxpages_20050727.zip)
大変便利なのだが、
ajpをロードするときなに、ソースが以下のようになっている。
var req; // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.open("GET", url, false); req.send(null); // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.open("GET", url, true); req.send(); } }
これ、IEのとき、.open("GET", url, true);なのだが、これだと「非同期」でリクエストになってしまう。
すると、タイムラグがあった場合、まだ使用できないreqにアクセスしてしまい反応がおかしくなる。
ここはfalseにするか、思い切ってprototype.jsのAjax.Requestに差し替えた方が良いかもしれない。
僕はAjax.Requestにしてます。
あと、ieだとajp内でvar宣言をしてない変数にアクセスするときスコープの関連で失敗することがあるので、
context(ajpに渡るパラメータ)以外はvar宣言を忘れないようにしよう。