56

主要な最新ブラウザーのみをサポートする必要がある (IE10+、FF、Chrome、Safari)

コードベースを簡素化したいので、この置換を行うことができますか:

から:

xhr.onreadystatechange = function () {
    if (this.readyState === 4) {
        if (this.status === 200) {
            o.callback(xhr.responseText);
        } else {
            return false;
        }
    } else {
        return false;
    }
};

に:

xhr.onload = function (test) {
    o.callback(xhr.responseText);
};

この点に関して、 MDN のドキュメントが明確であるとは思えません。

説明:

私はフレームワークを使用しないことにしました。

4

4 に答える 4

19

これW3Cを見てください。XMLHttpRequestブラウザがxhr.onloadをサポートしている場合も同じです。XMLHttpRequestが必要2)

xhr.onloadが存在しない場合は、それをエミュレートするラッピング関数を作成することもできます。(オーバーライドする必要があると思いますXMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow})。xhr.onloadを使用して最新のブラウザのみをサポートする場合は、利用可能である必要があります。最善の解決策は、フレームワークなどのラッピング機能を提供する)を使用することです。

于 2013-02-18T22:32:33.613 に答える
16

MDNのドキュメントでは、次のように述べています

イベント

xhr オブジェクトのプロパティとしての onreadystatechange は、すべてのブラウザでサポートされています。

それ以来、多くの追加のイベント ハンドラーがさまざまなブラウザー (onload、onerror、onprogress など) に実装されました。これらは Firefox でサポートされています。特に、nsIXMLHttpRequestEventTarget と XMLHttpRequest の使用を参照してください。

Firefox などの最近のブラウザーは、ハンドラー関数に on* プロパティを設定するだけでなく、標準の addEventListener API を介して XMLHttpRequest イベントをリッスンすることもサポートしています。

したがって、onreadystatechange が進むべき道であり、onload はブラウザーがサポートしている場合に使用できる追加機能であると想定できると思います。@mr.VVooの答えは正しいもので、疑わしい場合はw3cに固執します。

于 2013-02-18T22:28:40.657 に答える