3

何年もの間、同じコード スニペットを使用してXMLHttpRequestオブジェクトを作成しています。

var tReq = (function () {
    var tAn;
    if (window.XMLHttpRequest) {
        tAn = new XMLHttpRequest();
    } else if (window.ActiveXObject) try {
        tAn = new ActiveXObject("MSXML2.XMLHTTP");
    } catch (ex) {
        tAn = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return tAn;
}());

私はそのコードを長い間使用してきたので、まだ最新かどうかわかりません。

このコードはまだXMLHttpRequestすべてのブラウザーで を作成しますか、それとも最近ではより効率的なソリューションがありますか ( jQuery を要求しない)?

4

3 に答える 3

4

4、5年前にこのコードを使用したことを覚えていますか? この手法が最初に開発され、まだ議論されていたとき (戻るボタンを無効にしないという議論を覚えている人はいますか?)、まだ部分的にしかサポートされていませんでした。これは Firefox 1/2 あたりです。思い出すと、これは Outlook クライアントの応答性を高めるために使用された MS Outlook ライブラリが起源であり、最終的にはその技術がブラウザーに流れ込みました。

そうは言っても、最後の 2 行はレガシーです。最新のブラウザはすべてプレーンXMLHttpRequestをサポートしており、最後の 2 つはとにかく IE のみを対象としていました。将来的には、これはおそらくHTTPorAsyncRequestまたは何でもと短縮されるでしょうが、実際には、IE6 をサポートする必要がない限り、実際には最初の行だけが必要です。

ウィット:

Internet Explorer 7 より前のバージョンの Windows Internet Explorer をサポートするには、次の関数を使用して XMLHttpRequest オブジェクトを取得します。

function getXMLHttpRequest()  {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
}

http://msdn.microsoft.com/en-us/library/ie/ms535874%28v=vs.85%29.aspx

だから、あなたはもうそれを本当に必要としません。真実が言うように、jQuery、Angular、およびそれらの同類などのライブラリは、時間の経過とともにこれをバックグラウンドに組み込みます。ただし、直接アクセスすることも問題ありません。

また、MSDN の About Native XMLHTTPにリンクする価値があります。これは、質問に対する RobW のコメントのおかげです。これの要点は、グループ ポリシーまたは個々の IE ポリシーが native を無効にする可能性があるXMLHttpRequestため、回避策として有効にすること依然として有用である可能性がありますがActiveX、(少なくとも現時点では)より多くの機能を許可しながらそれを無効にするのは少しクレヨン アルミ箔のように思えますが、 「問題のある」ActiveXサブシステム。これについて考えられる説明は、帯域幅、同時接続、またはその他のネットワーク レベルの問題です。変。

于 2012-08-26T20:20:56.820 に答える
0

実際(そして私がこれを言っているとは信じられませんが)、jQueryはそれほど悪い解決策ではないかもしれません。

実際、jQueryはブラウザの奇妙な点を整理するために発明されました。これは、大規模なアダプタパターンの形式です。

その意味で、jQueryの.ajax()メソッドとそのエイリアスはこの仕事にぴったりです。

あなたが現在持っている解決策に関しては、それは私にはうまく見えます。IE7以降のすべてのブラウザで動作するはずです(両端を含む)。

于 2012-08-26T20:15:02.603 に答える
0

あなたのアプローチに問題はありません。それが助けになるなら、これは私がそれを行う方法です。

var tReq = (function(window) {
    var a = window,
        b = a.XMLHttpRequest,
        c = a.ActiveXObject,

        if (!b && c) {
            try {
                return new c("MSXML2.XMLHTTP");
            } catch (e) {
                return new c("Microsoft.XMLHTTP");
            }
        }
        return new b();
})(this);​
于 2012-08-26T20:25:23.950 に答える