3

これは、一部は回避策の要求であり、一部は Internet Explorer のプロトタイプの実装がまだ不完全であることを知らせようとする試みです。

次のコードは、Internet Explorer では機能しません。

XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open;
var x = new XMLHttpRequest();
x.old("POST", "test", false);

IE 8 ベータ版、およびそれ以前のすべてのバージョンでは、XMLHttpRequest.prototype プロパティは最初から存在しませんでした。IE8 には存在しますが、「無効なプロシージャ コールまたは引数」エラーが発生します。Internet Explorer は装飾が好きではありません。

誰もこれに対する回避策を知っていますか?

更新

XMLHttpRequest の全体を新しい関数とコンストラクターでオーバーライドしてから、ラッパー スクリプト ala XMLHttpRequest.js を作成できることが指摘されています。プロトタイプ メソッドははるかに短いので、IE 以外のブラウザーでも使用したいと思います。

4

1 に答える 1

2

問題は、IE 8 が XMLHttpRequest を認識しているが、関数として認識していないことです。Active X オブジェクトはまだ動作しているようです。window.XMLHtppRequest の存在をテストする代わりに、typeof window.XMLHtppRequest をテストします。問題なく動作するようです。

get リクエストを次のように書き直しました。

FG.ajax.getxhr = function(){
var xhr;
if (typeof window.XMLHttpRequest === 'function') {
    xhr  = XMLHttpRequest();
}
else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; 
于 2012-05-23T20:25:24.477 に答える