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宣言を忘れないようにしよう。