prototype.jsのAjaxをIE5.5に対応させる

prototype.js(確認したversionは1.4.0)はIE6.0以上をターゲットとしており、確かにIE5.5ではAjaxが動かない場合があります。ただこれは、prototype.jsをちょちょいと修正するだけで動作するようになります。

640行目で

this.transport.open(this.options.method, this.url,
  this.options.asynchronous);

XMLHttpRequestをオープンしているところがありますが、prototype.jsでは何故かmethodの指定が小文字で「get」「post」と渡さなくてはいけません。
どうもIE6.0やFirefoxはthis.transport.openの中で大文字変換がかかっているようなのですが、IE5.5はそれがされず小文字のままHTTPリクエストが送られているようです。
サーバ側のプログラムが「GET」「POST」は大文字である前提で作られていると(RFC上HTTPメソッドはcase sensitiveであるとされているので、大抵のプログラムはそう作っているはず。CGI.pmとか)、クエリー文字列をうまく解釈できずエラーとなります。


ということで、

this.transport.open(this.options.method.toUpperCase(), this.url,
  this.options.asynchronous);

と強制的に大文字に変換してやればIE5.5でも動作するようになります。