XMLHttpRequest

現行標準 — 最終更新

参加:
GitHub whatwg/xhr (新しい問題, オープンな問題)
Matrixでチャット
コミット:
GitHub whatwg/xhr/commits
このコミット時点のスナップショット
テスト:
web-platform-tests xhr/ (進行中の作業)
翻訳 (非規範的):
日本語
简体中文
한국어

概要

XMLHttpRequest標準は、クライアントとサーバー間でデータを転送するためのスクリプト化されたクライアント機能を提供するAPIを定義します。

1. 序論

このセクションは規範的ではありません。

XMLHttpRequest オブジェクトは、リソースを取得するためのAPIです。

XMLHttpRequest という名前は歴史的なものであり、その機能には関係ありません。

ネットワーク経由で取得したXMLドキュメントからデータを処理する簡単なコードの例です:

function processData(data) {
  // データの処理
}

function handler() {
  if(this.status == 200 &&
    this.responseXML != null &&
    this.responseXML.getElementById('test').textContent) {
    // 成功!
    processData(this.responseXML.getElementById('test').textContent);
  } else {
    // 何かがうまくいかなかった
    …
  }
}

var client = new XMLHttpRequest();
client.onload = handler;
client.open("GET", "unicorn.xml");
client.send();

サーバーにメッセージを記録するだけの例:

function log(message) {
  var client = new XMLHttpRequest();
  client.open("POST", "/log");
  client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
  client.send(message);
}

サーバー上のドキュメントのステータスを確認する場合:

function fetchStatus(address) {
  var client = new XMLHttpRequest();
  client.onload = function() {
    // ネットワークエラーの場合、これは信頼できる結果を提供しない可能性があります
    returnStatus(this.status);
  }
  client.open("HEAD", address);
  client.send();
}

1.1. 仕様の歴史

XMLHttpRequest オブジェクトは、WHATWGのHTMLの取り組みの一環として最初に定義されました。(それ以前のMicrosoftの実装に基づくものです。) 2006年にW3Cに移行しました。XMLHttpRequest の拡張機能(例:進捗イベントやクロスオリジンリクエスト)は、2011年末まで 別のドラフト(XMLHttpRequest Level 2)で開発され、その後2つのドラフトが統合され、標準の観点からXMLHttpRequest は再び単一のエンティティになりました。2012年末にWHATWGに戻りました。

現在のドラフトにつながる議論は、以下のメーリングリストアーカイブで見つけることができます:

2. 用語

この仕様書はInfra Standardに依存しています。[INFRA]

この仕様書は、DOM、DOM Parsing and Serialization、Encoding、Fetch、File API、HTML、URL、Web IDL、およびXMLからの用語を使用します。

[DOM] [DOM-PARSING] [ENCODING] [FETCH] [FILEAPI] [HTML] [URL] [WEBIDL] [XML] [XML-NAMES]

3. インターフェース XMLHttpRequest

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequestEventTarget : EventTarget {
  // event handlers
  attribute EventHandler onloadstart;
  attribute EventHandler onprogress;
  attribute EventHandler onabort;
  attribute EventHandler onerror;
  attribute EventHandler onload;
  attribute EventHandler ontimeout;
  attribute EventHandler onloadend;
};

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {
};

enum XMLHttpRequestResponseType {
  "",
  "arraybuffer",
  "blob",
  "document",
  "json",
  "text"
};

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequest : XMLHttpRequestEventTarget {
  constructor();

  // event handler
  attribute EventHandler onreadystatechange;

  // states
  const unsigned short UNSENT = 0;
  const unsigned short OPENED = 1;
  const unsigned short HEADERS_RECEIVED = 2;
  const unsigned short LOADING = 3;
  const unsigned short DONE = 4;
  readonly attribute unsigned short readyState;

  // request
  undefined open(ByteString method, USVString url);
  undefined open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null);
  undefined setRequestHeader(ByteString name, ByteString value);
           attribute unsigned long timeout;
           attribute boolean withCredentials;
  [SameObject] readonly attribute XMLHttpRequestUpload upload;
  undefined send(optional (Document or XMLHttpRequestBodyInit)? body = null);
  undefined abort();

  // response
  readonly attribute USVString responseURL;
  readonly attribute unsigned short status;
  readonly attribute ByteString statusText;
  ByteString? getResponseHeader(ByteString name);
  ByteString getAllResponseHeaders();
  undefined overrideMimeType(DOMString mime);
           attribute XMLHttpRequestResponseType responseType;
  readonly attribute any response;
  readonly attribute USVString responseText;
  [Exposed=Window] readonly attribute Document? responseXML;
};

XMLHttpRequest オブジェクトには次の関連付けがあります:

アップロードオブジェクト
XMLHttpRequestUpload オブジェクト。
状態
未送信、オープン済み、ヘッダー受信済み、読み込み中、および 完了 のいずれか。 初期値は 未送信。
send() 呼び出し済み
boolean。初期値は false。
タイムアウト
符号なし整数。初期値は 0。
オリジン間 資格情報
boolean。初期値は false。
要求メソッド
メソッド。
要求 URL
URL。
作者要求 ヘッダー
ヘッダーリスト。初期状態では空。
要求本体
初期値は null。
同期
boolean。初期値は false。
アップロード 完了
boolean。初期値は false。
アップロード リスナー
boolean。初期値は false。
タイムアウト済み
boolean。初期値は false。
応答
応答。初期値は ネットワークエラー。
受信済みバイト
バイト列。初期状態では空のバイト列。
応答型
空文字列、"arraybuffer"、"blob"、 "document"、"json"、および "text" のいずれか。初期値は空文字列。
応答オブジェクト
オブジェクト、失敗、または null。初期値は null。
fetch コントローラー
fetch コントローラー。初期値は新しい fetch コントローラー。 send() メソッドは、それを有用な fetch コントローラー に設定するが、簡潔にするため、これは常に fetch コントローラー を保持する。
上書き MIME 型
MIME 型 または null。初期値は null。 値を取得できる場合がある。 それは overrideMimeType() が呼び出されたときである。

3.1. コンストラクター

client = new XMLHttpRequest()
新しいXMLHttpRequest オブジェクトを返します。

new XMLHttpRequest() コンストラクターの手順は次の通りです:

  1. thisの アップロードオブジェクトを新しい XMLHttpRequestUploadオブジェクトに設定します。

3.2. ガベージコレクション

XMLHttpRequest オブジェクトは、その 状態 が、 send() 呼び出し済み が true である オープン済み、 ヘッダー受信済み、または 読み込み中 のいずれかであり、かつ type が次のいずれかである イベントリスナー が 1 つ以上登録されている場合、ガベージコレクトされてはならない: readystatechange、 progress、 abort、 error、 load、 timeout、 および loadend。

XMLHttpRequest オブジェクトが接続がまだ開いている状態でガベージコレクションされた場合、ユーザーエージェントは 終了しなければなりません。そのXMLHttpRequest オブジェクトの フェッチコントローラーを。

3.3. イベントハンドラー

次に挙げるものは、イベントハンドラー(およびそれに対応するイベントハンドラーイベントタイプ) であり、XMLHttpRequestEventTarget を継承するインターフェースを実装するオブジェクト上で属性としてサポートされなければなりません:

イベントハンドラー イベントハンドラーイベントタイプ
onloadstart loadstart
onprogress progress
onabort abort
onerror error
onload load
ontimeout timeout
onloadend loadend

次に挙げるものはイベントハンドラー(およびそれに対応するイベントハンドラーイベントタイプ)であり、XMLHttpRequest オブジェクトのみで属性としてサポートされなければなりません:

イベントハンドラー イベントハンドラーイベントタイプ
onreadystatechange readystatechange

3.4. 状態

client . readyState

clientの状態を返します。

readyStateゲッターの手順は、次の表で 第1列のセルの値がthisの状態である行から第2列のセルの値を返すことです:

未送信 UNSENT(数値0) オブジェクトが構築されました。
オープン OPENED(数値1) open()メソッドが正常に呼び出されました。この状態では、 setRequestHeader()を使用してリクエストヘッダーを設定したり、 send()メソッドを使用してフェッチを開始することができます。
ヘッダー受信済み HEADERS_RECEIVED (数値2) 全てのリダイレクト(ある場合)が追跡され、レスポンスの全てのヘッダーが受信されました。
読み込み中 LOADING(数値3) レスポンスの本文が受信されています。
完了 DONE(数値4) データ転送が完了したか、転送中に何らかの問題(例:無限リダイレクト)が発生しました。

3.5. リクエスト

1 つ以上のイベントリスナーを XMLHttpRequestUpload オブジェクトに登録すると、CORS プリフライト要求 が発生する。(これは、 イベントリスナーを登録すると、アップロードリスナー が true に設定され、それによって use-CORS-preflight フラグ が設定されるためである。)

3.5.1. open() メソッド

client . open(method, url [, async = true [, username = null [, password = null]]])

要求 メソッド、要求 URL、および要求が 同期であるかどうかを設定する。

methodが有効なメソッドでない場合、またはurlを解析できない場合、 "SyntaxError" DOMException をスローします。

methodが`CONNECT`、`TRACE`、または`TRACK`に 大文字小文字を区別せず一致する場合、 "SecurityError" DOMException をスローします。

asyncがfalseで、現在のグローバルオブジェクトがWindow オブジェクトであり、 timeout 属性が0でない、またはresponseType 属性が空文字列でない場合、 "InvalidAccessError" DOMException をスローします。

ワーカー外での同期的XMLHttpRequest は、エンドユーザーの体験に悪影響を与えるため、ウェブプラットフォームから削除される過程にあります。(これは数年かかる長いプロセスです。)開発者は、現在のグローバルオブジェクトがWindowオブジェクトである場合、 async引数にfalseを渡さないようにする必要があります。ユーザーエージェントはこのような使用法について開発者ツールで警告を出すことが強く推奨されており、 発生時に"InvalidAccessError" DOMException をスローする試みを行うことができます。

open(method, url) および open(method, url, async, username, password) メソッドの手順は以下の通りです:

  1. このthisの 関連するグローバルオブジェクトがWindow オブジェクトであり、 関連付けられたDocument が完全にアクティブでない場合、 以下をスローします: "InvalidStateError" DOMException。

  2. methodがメソッド でない場合、 以下をスローします: "SyntaxError" DOMException。

  3. methodが禁止されたメソッド の場合、 以下をスローします: "SecurityError" DOMException。

  4. メソッドを正規化します。

  5. parsedURLをURLをエンコード・解析した結果とし、 それをthis の関連設定オブジェクトに相対的なものとします。

  6. parsedURLが失敗した場合、 以下をスローします: "SyntaxError" DOMException。

  7. async引数が省略された場合、asyncをtrueに設定し、 usernameとpasswordをnullに設定します。

    残念ながら、レガシーコンテンツにより、async引数が undefinedであることと省略されたことを同一視することが妨げられています。

  8. parsedURLのホスト がnullでない場合:

    1. username引数がnullでない場合、 ユーザー名を設定します。 parsedURLとusernameを基にします。

    2. password引数がnullでない場合、 パスワードを設定します。 parsedURLとpasswordを基にします。

  9. asyncがfalseで、 現在のグローバルオブジェクトがWindow オブジェクトであり、 thisのタイムアウトが0でない、またはthisのレスポンスタイプ が空文字列でない場合、 以下をスローします: "InvalidAccessError" DOMException。

  10. このfetch controllerを終了します。 thisのfetch controller。

    この時点でfetch が進行中である可能性があります。

  11. オブジェクトに関連付けられた変数を次のように設定する:

    上書き MIME 型 はここでは上書きされない。これは、 overrideMimeType() メソッドが open() メソッドの前に呼び出せるためである。

  12. this の 状態 が オープン済み でない場合:

    1. this の 状態 を オープン済み に設定する。

    2. イベントを発火する:readystatechange という名前のイベントを this に対して。

2つのopen()メソッドが定義されている理由は、 XMLHttpRequest現行標準を書く際に使用された編集ソフトウェアの制限によるものです。

3.5.2. setRequestHeader() メソッド

client . setRequestHeader(name, value)

既存の要求ヘッダーに値を追加するか、新しい要求ヘッダーを追加する。

状態 が オープン済み でない、または send() 呼び出し済み が true である場合、 "InvalidStateError" DOMException を投げる。

name がヘッダー名でない、または value がヘッダー値でない場合、"SyntaxError" DOMException を投げる。

setRequestHeader(name, value) メソッド手順は次のとおり:

  1. this の 状態 が オープン済み でない場合、"InvalidStateError" DOMException を投げる。

  2. this の send() 呼び出し済み が true である場合、"InvalidStateError" DOMException を投げる。

  3. value を正規化する。

  4. name がヘッダー名でない、または value が ヘッダー値でない場合、"SyntaxError" DOMException を投げる。

    空のバイト列は、空のヘッダー値を表す。

  5. (name, value) が禁止要求ヘッダーである場合、返す。

  6. (name, value) を this の 作者 要求ヘッダー 内で結合する。

同じヘッダーを2回設定した場合に何が起こるかを示す簡単なコード例:

// 以下のスクリプト:
var client = new XMLHttpRequest();
client.open('GET', 'demo.cgi');
client.setRequestHeader('X-Test', 'one');
client.setRequestHeader('X-Test', 'two');
client.send();

// …次のヘッダーが送信されます:
// X-Test: one, two

3.5.3. timeout ゲッターおよびセッター

client . timeout

ミリ秒単位の時間に設定できる。非 0 の値に設定すると、指定された時間が経過した後に fetching が終了される。時間が経過し、 要求がまだ完了しておらず、かつ 同期 が false である場合、 timeout イベントが配送され、そうでない場合は "TimeoutError" DOMException が投げられる( send() メソッドの場合)。

設定時:同期 が true であり、かつ 現在のグローバルオブジェクト が Window オブジェクトである場合、"InvalidAccessError" DOMException を投げる。

timeout getter 手順は、 this の タイムアウト を返すことである。

timeout setter 手順は次のとおり:

  1. 現在のグローバルオブジェクト が Window オブジェクトであり、かつ this の 同期 が true である場合、"InvalidAccessError" DOMException を投げる。

  2. this の タイムアウト を指定された値に設定する。

これは、 timeout 属性を fetching が進行中である間にも 設定できることを意味する。その場合でも、 fetching の開始を基準として測定される。

3.5.4. withCredentials ゲッターおよびセッター

client . withCredentials

オリジン間要求に 資格情報を含める場合は true。オリジン間要求で資格情報を 除外し、その応答内の Cookie を無視する場合は false。 初期値は false。

設定時:状態 が 未送信 または オープン済み のいずれでもない、または send() 呼び出し済み が true である場合、 "InvalidStateError" DOMException を投げる。

withCredentials getter 手順は、 this の オリジン間 資格情報 を返すことである。

withCredentials setter 手順は次のとおり:

  1. this の 状態 が 未送信 または オープン済み のいずれでもない場合、 "InvalidStateError" DOMException を投げる。

  2. this の send() 呼び出し済み が true である場合、"InvalidStateError" DOMException を投げる。

  3. this の オリジン間資格情報 を指定された値に設定する。

3.5.5. upload ゲッター

client . upload

関連付けられた XMLHttpRequestUpload オブジェクトを返す。これは、データがサーバーへ 転送されるときに送信情報を収集するために使用できる。

upload getter 手順は、 this の アップロードオブジェクト を返すことである。

3.5.6. send() メソッド

client . send([body = null])

要求を開始する。body 引数は、存在する場合に 要求本体を提供し、 要求メソッドが GET または HEAD である場合は無視される。

状態が オープン済み でない、または send() 呼び出し済みが true である場合、 "InvalidStateError" DOMException を投げる。

send(body) メソッド 手順は次のとおり:

  1. this の 状態 が オープン済み でない場合、"InvalidStateError" DOMException を投げる。

  2. this の send() 呼び出し済み が true である場合、"InvalidStateError" DOMException を投げる。

  3. this の 要求メソッド が `GET` または `HEAD` である場合、 body を null に設定する。

  4. body が null でない場合:

    1. extractedContentType を null とする。

    2. body が Document である場合、 this の 要求本体を、 body を直列化し、 変換し、UTF-8 エンコードしたものに設定する。

    3. そうでない場合:

      1. bodyWithType を、 body を安全に抽出した結果とする。

      2. this の 要求本体を bodyWithType の body に設定する。

      3. extractedContentType を bodyWithType の type に設定する。

    4. originalAuthorContentType を、 取得する結果とする: `Content-Type` を、this の 作者要求ヘッダーから取得する。

    5. originalAuthorContentType が非 null である場合:

      1. body が Document オブジェクト、URLSearchParams オブジェクト、または 文字列である場合:

        1. contentTypeRecord を、 originalAuthorContentType を解析した結果とする。

        2. contentTypeRecord が failure でなく、 contentTypeRecord の parameters["charset"] が存在し、かつ parameters["charset"] が "UTF-8" に対する ASCII 大小無視一致でない場合:

          1. contentTypeRecord の parameters["charset"] を "UTF-8" に設定する。

          2. newContentTypeSerialized を、 contentTypeRecord を直列化した結果とする。

          3. (`Content-Type`, newContentTypeSerialized) を this の 作者要求ヘッダー内に設定する。

    6. そうでない場合:

      1. body が HTML 文書である場合、 (`Content-Type`, `text/html;charset=UTF-8`) を this の 作者要求ヘッダー内に設定する。

      2. そうでなく、body が XML 文書である場合、 (`Content-Type`, `application/xml;charset=UTF-8`) を this の 作者要求ヘッダー内に設定する。

      3. そうでなく、extractedContentType が null でない場合、 (`Content-Type`, extractedContentType) を this の 作者要求ヘッダー内に設定する。

  5. 1 つ以上のイベントリスナーが this の アップロードオブジェクトに登録されている場合、 this の アップロードリスナーを true に設定する。

  6. req を、次のように初期化された新しい 要求とする:

    method
    This の 要求メソッド。
    URL
    This の 要求 URL。
    ヘッダーリスト
    This の 作者要求ヘッダー。
    unsafe-request フラグ
    設定済み。
    body
    This の 要求本体。
    client
    This の 関連設定オブジェクト。
    mode
    "cors"。
    use-CORS-preflight フラグ
    this の アップロードリスナーが true である場合に設定済み。
    credentials mode
    this の オリジン間資格情報が true である場合は "include"、 そうでない場合は "same-origin"。
    use-URL-credentials フラグ
    this の 要求 URLが資格情報を含む場合に設定済み。
    initiator type
    "xmlhttprequest"。
  7. this の アップロード完了を false に設定する。

  8. this の タイムアウト済みを false に設定する。

  9. req の body が null である場合、this の アップロード 完了を true に設定する。

  10. this の send() 呼び出し済みを true に設定する。

  11. this の 同期が false である場合:

    1. 進捗イベントを発火する:loadstart という名前のイベントを this に対して、0 および 0 で。

    2. requestBodyTransmitted を 0 とする。

    3. requestBodyLength を、req の bodyが非 null である場合は、そのbodyの長さとし、 そうでない場合は 0 とする。

    4. アサート:requestBodyLength は整数である。

    5. this の アップロード完了が false であり、かつ this の アップロードリスナーが true である場合、進捗イベントを発火する: loadstart という名前のイベントを this の アップロードオブジェクト に対して、 requestBodyTransmitted および requestBodyLength で。

    6. this の 状態が オープン済み でない、または this の send() 呼び出し済みが false である場合、返す。

    7. bytesLength が与えられた processRequestBodyChunkLength を、次の手順とする:

      1. requestBodyTransmitted を bytesLength だけ増加させる。

      2. これらの手順が前回呼び出されてからおおよそ 50ms が経過していない場合、返す。

      3. this の アップロード リスナーが true である場合、進捗イベントを発火する: progress という名前のイベントを this の アップロードオブジェクトに対して、 requestBodyTransmitted および requestBodyLength で。

      これらの手順は、新しいバイトが送信されたときにのみ呼び出される。

    8. processRequestEndOfBody を次の手順とする:

      1. this の アップロード 完了を true に設定する。

      2. this の アップロード リスナーが false である場合、返す。

      3. 進捗イベントを発火する:progress という名前のイベントを this の アップロード オブジェクトに対して、requestBodyTransmitted および requestBodyLength で。

      4. 進捗イベントを発火する:load という名前のイベントを this の アップロード オブジェクトに対して、requestBodyTransmitted および requestBodyLength で。

      5. 進捗イベントを発火する:loadend という名前のイベントを this の アップロード オブジェクトに対して、requestBodyTransmitted および requestBodyLength で。

    9. response が与えられた processResponse を、次の手順とする:

      1. this の 応答を response に設定する。

      2. エラーを処理する: this について。

      3. this の 応答が ネットワークエラーである場合、 返す。

      4. this の 状態を ヘッダー 受信済みに設定する。

      5. イベントを発火する:readystatechange という名前のイベントを this に対して。

      6. this の 状態が ヘッダー 受信済みでない場合、返す。

      7. this の 応答の bodyが null である場合、 応答の本体終了を処理するを this について実行し、返す。

      8. length を、 this の 応答の ヘッダーリストから長さを抽出した結果とする。

      9. length が整数でない場合、それを 0 に設定する。

      10. bytes が与えられた processBodyChunk を次の手順とする:

        1. bytes を this の 受信済みバイトに追加する。

        2. これらの手順が前回呼び出されてからおおよそ 50ms が経過していない場合、 返す。

        3. this の 状態が ヘッダー 受信済みである場合、this の 状態を 読み込み中に設定する。

        4. イベントを発火する:readystatechange という名前のイベントを this に対して。

          Web 互換性が、readystatechange が this の 状態の変更より頻繁に発火する理由である。

        5. 進捗イベントを発火する: progress という名前のイベントを this に対して、this の 受信済みバイトの 長さおよび length で。

      11. processEndOfBody を次の手順とする:応答の本体終了を処理するを this について実行する。

      12. processBodyError を次の手順とする:

        1. this の 応答を ネットワークエラーに設定する。

        2. エラーを処理するを this について実行する。

      13. this の 応答の bodyを、processBodyChunk、 processEndOfBody、 processBodyError、および this の 関連グローバルオブジェクトを与えて、増分的に読み取る。

    10. this の fetch コントローラーを、 req をfetchingした結果に設定する。このとき、 processRequestBodyChunkLength は processRequestBodyChunkLength に設定し、processRequestEndOfBody は processRequestEndOfBody に設定し、かつ processResponse は processResponse に設定する。

    11. now を現在時刻とする。

    12. 次の手順を並列に実行する:

      1. req の done フラグが設定されるまで、または this の タイムアウトが 0 でなく、かつ now から this の タイムアウトミリ秒が経過するまで待機する。

      2. req の done フラグが未設定である場合、this の タイムアウト 済みを true に設定し、this の fetch コントローラーを終了する。

  12. そうでなく、this の 同期が true である場合:

    1. processedResponse を false とする。

    2. response および nullOrFailureOrBytes が与えられた processResponseConsumeBody を、次の手順とする:

      1. nullOrFailureOrBytes が failure でない場合、this の 応答を response に設定する。

      2. nullOrFailureOrBytes が バイト列である場合、 nullOrFailureOrBytes を this の 受信済みバイトに追加する。

      3. processedResponse を true に設定する。

    3. this の fetch コントローラーを、 req をfetchingした結果に設定する。このとき、 processResponseConsumeBody は processResponseConsumeBody に設定し、 かつ useParallelQueue は true に設定する。

    4. now を現在時刻とする。

    5. processedResponse が true になるまで、または this の タイムアウトが 0 でなく、かつ now から this の タイムアウトミリ秒が経過するまで、一時停止する。

    6. processedResponse が false である場合、this の タイムアウト済み を true に設定し、 this の fetch コントローラーを終了する。

    7. 現在のグローバルオブジェクトを与えて、タイミングを報告する: this の fetch コントローラーについて。

    8. 応答の本体終了を処理するを this について実行する。

XMLHttpRequest オブジェクト xhr について、応答の本体終了を処理するには、次の手順を実行する:

  1. エラーを処理する: xhr について。

  2. xhr の 応答が ネットワークエラーである場合、 返す。

  3. transmitted を、xhr の 受信済みバイトの 長さとする。

  4. length を、 this の 応答の ヘッダーリストから長さを抽出した結果とする。

  5. length が整数でない場合、それを 0 に設定する。

  6. xhr の 同期が false である場合、進捗 イベントを発火する: progress という名前のイベントを xhr に対して、 transmitted および length で。

  7. xhr の 状態を 完了に設定する。

  8. xhr の send() 呼び出し済みを false に設定する。

  9. イベントを発火する:readystatechange という名前のイベントを xhr に対して。

  10. 進捗イベントを発火する:load という名前のイベントを xhr に対して、transmitted および length で。

  11. 進捗イベントを発火する:loadend という名前のイベントを xhr に対して、 transmitted および length で。

XMLHttpRequest オブジェクト xhr について、エラーを処理するには、次の手順を実行する:

  1. xhr の send() 呼び出し済みが false である場合、返す。

  2. xhr の タイムアウト 済みが true である場合、xhr、 timeout、および "TimeoutError" DOMException について、要求エラー手順を実行する。

  3. そうでなく、xhr の 応答の 中止済みフラグが設定されている場合、xhr、 abort、および "AbortError" DOMException について、要求エラー手順を実行する。

  4. そうでなく、xhr の 応答が ネットワークエラーである場合、xhr、 error、 および "NetworkError" DOMException について、要求エラー手順を実行する。

XMLHttpRequest オブジェクト xhr、 event、および任意で exception についての 要求エラー 手順は次のとおり:

  1. xhr の 状態を 完了に設定する。

  2. xhr の send() 呼び出し済みを false に設定する。

  3. xhr の 応答を ネットワークエラーに設定する。

  4. xhr の 同期が true である場合、 exception を投げる。

  5. イベントを発火する:readystatechange という名前のイベントを xhr に対して。

    この時点で、xhr の 同期が false であることは明らかである。

  6. xhr の アップロード完了が false である場合:

    1. xhr の アップロード完了を true に設定する。

    2. xhr の アップロードリスナーが true である場合:

      1. 進捗イベントを発火する: event という名前のイベントを xhr の アップロード オブジェクトに対して、0 および 0 で。

      2. 進捗イベントを発火する:loadend という名前のイベントを xhr の アップロード オブジェクトに対して、0 および 0 で。

  7. 進捗イベントを発火する:event という名前のイベントを xhr に対して、0 および 0 で。

  8. 進捗イベントを発火する:loadend という名前のイベントを xhr に対して、0 および 0 で。

3.5.7. abort() メソッド

client . abort()
すべてのネットワーク活動を取り消す。

abort() メソッド手順は次のとおり:

  1. 中止する:this の fetch コントローラーを。

  2. this の 状態が、this の send() 呼び出し済み が true である オープン済み、ヘッダー受信済み、または 読み込み中 である場合、 要求エラー 手順を this および abort について実行する。

  3. this の 状態が 完了 である場合、this の 状態を 未送信 に設定し、this の 応答を ネットワークエラーに設定する。

    readystatechange イベントは配送されない。

3.6. レスポンス

3.6.1. responseURL ゲッター

responseURL getter 手順は、 this の 応答の URL が null である場合は空文字列を返し、そうでない場合は exclude fragment flag を 設定した、その 直列化を返すことである。

3.6.2. status ゲッター

status ゲッターの手順は次の通りです: thisの レスポンスの ステータスを返します。

3.6.3. statusText ゲッター

statusText ゲッターの手順は次の通りです: thisの レスポンスの ステータスメッセージを返します。

3.6.4. getResponseHeader() メソッド

getResponseHeader(name) メソッドの手順は次の通りです: 取得したnameの結果を返します。 対象はthisの レスポンスの ヘッダーリスト。

Fetch 現行標準はthisの レスポンスの ヘッダーリストをフィルタリングします。 [FETCH]

次のスクリプトの場合:

var client = new XMLHttpRequest();
client.open("GET", "unicorns-are-awesome.txt", true);
client.send();
client.onreadystatechange = function() {
  if(this.readyState == this.HEADERS_RECEIVED) {
    print(client.getResponseHeader("Content-Type"));
  }
}

print()関数は次のような内容を処理します:

text/plain; charset=UTF-8

3.6.5. getAllResponseHeaders() メソッド

バイト列 a は、次の手順が true を返す場合、レガシー大文字バイト未満の バイト列 bです:

  1. A を a を大文字化したものとします。

  2. B を b を大文字化したものとします。

  3. A がバイト未満 B である場合、true を返します。

getAllResponseHeaders() メソッドの手順は次の通りです:

  1. output を空のバイト列として設定します。

  2. initialHeaders を、次のソートおよび結合の結果として設定します。 対象はthisの レスポンスの ヘッダーリスト。

  3. headersを、initialHeadersを昇順にソートした結果とする。このとき、aの名前がbの名前よりレガシー大文字バイト未満である場合に、aはbより小さいものとする。

    残念ながら、これは展開済みのコンテンツとの互換性のために必要です。

  4. 各 header について、 header の名前に続けて 0x3A 0x20 バイトペアを追加し、 header の値に続けて 0x0D 0x0A バイトペアを追加し、 output に追加します。

  5. output を返します。

Fetch 現行標準はthisの レスポンスの ヘッダーリストをフィルタリングします。 [FETCH]

次のスクリプトの場合:

var client = new XMLHttpRequest();
client.open("GET", "narwhals-too.txt", true);
client.send();
client.onreadystatechange = function() {
  if(this.readyState == this.HEADERS_RECEIVED) {
    print(this.getAllResponseHeaders());
  }
}

print()関数は次のような内容を処理します:

connection: Keep-Alive
content-type: text/plain; charset=utf-8
date: Sun, 24 Oct 2004 04:58:38 GMT
keep-alive: timeout=15, max=99
server: Apache/1.3.31 (Unix)
transfer-encoding: chunked

3.6.6. レスポンス本文

XMLHttpRequest オブジェクト xhr に対して レスポンス MIME タイプを取得 するには、次の手順を実行します:

  1. mimeType を、xhr の レスポンス の ヘッダーリストから MIME タイプを抽出した結果として設定します。

  2. もし mimeType が失敗の場合、mimeType を text/xml に設定します。

  3. mimeType を返します。

XMLHttpRequest オブジェクト xhr に対して 最終的な MIME タイプを取得 するには、次の手順を実行します:

  1. もし xhr の override MIME タイプ が null の場合、 xhr に対して レスポンス MIME タイプを取得 の結果を返します。

  2. xhr の override MIME タイプ を返します。

XMLHttpRequest オブジェクト xhr に対して 最終的なエンコーディングを取得 するには、次の手順を実行します:

  1. label を null に設定します。

  2. responseMIME を xhr に対して レスポンス MIME タイプを取得した結果として設定します。

  3. もし responseMIME の パラメーター["charset"] が存在する場合、label をそれに設定します。

  4. もし xhr の override MIME タイプ の パラメーター["charset"] が存在する場合、label をそれに設定します。

  5. もし label が null の場合、null を返します。

  6. encoding を label から エンコーディングを取得した結果として設定します。

  7. もし encoding が失敗の場合、null を返します。

  8. encoding を返します。

上記の手順は、最終的な MIME タイプを取得 を使用しないように意図的に設計されています。これはウェブ互換性のためです。


ドキュメントレスポンスを設定するためには、XMLHttpRequest オブジェクト xhr に対して、次の手順を実行します。

  1. xhr の response の body が null の場合は、 処理を終了します。

  2. finalMIME を、xhr に対して 最終的な MIME タイプを取得する 結果とします。

  3. finalMIME が HTML MIME タイプ または XML MIME タイプ でない場合は、処理を終了します。

  4. xhr の response type が空文字列であり、かつ finalMIME が HTML MIME タイプ である場合は、処理を終了します。

    これは、レガシーコンテンツの破壊を防ぐために、xhr の response type が "document" に限定されています。

  5. finalMIME が HTML MIME タイプ である場合:

    1. charset を、xhr に対する 最終的なエンコーディングを取得する 結果とします。

    2. charset が null の場合は、 xhrの受信済みバイト列の最初の1024バイトを事前スキャン し、それが失敗しなければ charset をその戻り値に設定します。

    3. charset が null の場合は、charset を UTF-8 に設定します。

    4. document を、xhr の 受信バイト を HTML Standard の HTML パーサーの規則に従い、 スクリプトを無効にした状態で、既知の確定エンコーディング charset を用いて解析した結果を表す ドキュメント とします。 [HTML]

    5. document を HTML ドキュメント としてフラグ付けします。

  6. そうでない場合、document を xhr の 受信バイト に対して、XML パーサー を XML スクリプトサポートを無効にした状態で 実行した結果を表す ドキュメント とします。それが失敗(未対応の文字エンコーディング、名前空間の整形式エラーなど)した場合、null を返します。 [HTML]

    参照されるリソースは読み込まれず、関連する XSLT は適用されません。

  7. charset が null の場合は、charset を UTF-8 に設定します。

  8. document の エンコーディング を charset に設定します。

  9. document の コンテンツタイプ を finalMIME に設定します。

  10. document の URL を xhr の response の URL に設定します。

  11. document の オリジン を xhr の 関連する設定オブジェクト の オリジン に設定します。

  12. xhr の response object を document に設定します。

テキストレスポンスを取得するためには、 XMLHttpRequest オブジェクト xhr に対して、次の手順を実行します。

  1. xhr の response の body が null の場合は、 空文字列を返します。

  2. charset を、xhr に対する 最終的なエンコーディングを取得する 結果とします。

  3. xhr の response type が空文字列であり、charset が null であり、 かつ xhr に対して 最終的な MIME タイプを取得する 結果が XML MIME タイプ である場合は、 XML 仕様に記載された規則を使用してエンコーディングを決定します。charset をその決定されたエンコーディングとします。 [XML] [XML-NAMES]

    これは、非レガシーな response type 値 "text" を簡潔に保つために、 xhr の response type を空文字列に限定しています。

  4. charset が null の場合は、charset を UTF-8 に設定します。

  5. xhr の 受信バイト を デコード し、 フォールバックエンコーディングを charset として、その結果を返します。

作成者は、常にリソースを UTF-8 を使用してエンコードすることを強く推奨します。

3.6.7. overrideMimeType() メソッド

client . overrideMimeType(mime)

レスポンスの `Content-Type` ヘッダー値が mime であるかのように振る舞います。(ヘッダー自体は変更されません。)

loading または done 状態のときに、"InvalidStateError" DOMException をスローします。

overrideMimeType(mime) メソッドの手順は以下の通りです:

  1. this の 状態が 読み込み中 または 完了 である場合、"InvalidStateError" DOMException を投げる。

  2. this の 上書き MIME 型を、 mime を解析した結果に設定する。

  3. this の 上書き MIME 型が failure である場合、this の 上書き MIME 型を application/octet-stream に設定する。

3.6.8. responseType ゲッターおよびセッター

client . responseType [ = value ]

応答型を返す。

応答型を変更するために設定できる。値は次のとおり: 空文字列(既定)、 "arraybuffer"、 "blob"、 "document"、 "json"、および "text"。

設定時:現在のグローバルオブジェクトが Window オブジェクトでない場合、"document" への設定は無視される。

設定時:状態が 読み込み中 または 完了 である場合、"InvalidStateError" DOMException を投げる。

設定時: 同期が true であり、かつ 現在のグローバルオブジェクトが Window オブジェクトである場合、"InvalidAccessError" DOMException を投げる。

responseType getter 手順は、 this の 応答型を返すことである。

responseType setter 手順は次のとおり:

  1. 現在のグローバルオブジェクトが Window オブジェクトでなく、かつ指定された値が "document" である場合、返す。

  2. this の 状態が 読み込み中 または 完了 である場合、"InvalidStateError" DOMException を投げる。

  3. 現在のグローバルオブジェクトが Window オブジェクトであり、かつ this の 同期が true である場合、"InvalidAccessError" DOMException を投げる。

  4. this の 応答型を指定された値に設定する。

3.6.9. response ゲッター

client . response

レスポンスボディを返します。

response ゲッターの手順は以下の通りです:

  1. this の 応答型が空文字列または "text" である場合:

    1. this の 状態が 読み込み中 または 完了 でない場合、空文字列を返す。

    2. this についてテキスト応答を取得する結果を返す。

  2. this の 状態が 完了 でない場合、null を返す。

  3. this の 応答オブジェクトが failure である場合、null を返す。

  4. this の 応答オブジェクトが非 null である場合、それを返す。

  5. this の 応答型が "arraybuffer" である場合、this の 応答オブジェクトを、 this の 受信済みバイトを表す 新しい ArrayBuffer オブジェクトに設定する。これが例外を投げる場合、this の 応答オブジェクト を failure に設定し、null を返す。

    ArrayBuffer オブジェクトの割り当ては、成功することが保証されていない。 [ECMASCRIPT]

  6. そうでなく、this の 応答型が "blob" である場合、 this の 応答オブジェクトを、 this の 受信済みバイトを表し、 type が this について 最終 MIME 型を取得する結果に設定された、新しい Blob オブジェクトに設定する。

  7. そうでなく、this の 応答型が "document" である場合、 文書 応答を設定するを this について行う。

  8. そうでない場合:

    1. アサート:this の 応答型は "json" である。

    2. this の 応答の bodyが null である場合、 null を返す。

    3. jsonObject を、 this の 受信済みバイトに対してバイトから JSON を解析するを実行した結果とする。 それが例外を投げた場合、null を返す。

    4. this の 応答オブジェクトを jsonObject に設定する。

  9. this の 応答オブジェクトを返す。

3.6.10. responseText ゲッター

client . responseText

レスポンスをテキストとして返します。

InvalidStateError" DOMException をスローします。 responseType が空文字列または "text" でない場合。

responseText ゲッターの手順は以下の通りです:

  1. this の 応答型が空文字列でも "text" でもない場合、 "InvalidStateError" DOMException を投げる。

  2. this の 状態が 読み込み中 または 完了 でない場合、 空文字列を返す。

  3. this についてテキスト応答を取得する結果を返す。

3.6.11. responseXML ゲッター

client . responseXML

レスポンスをドキュメントとして返します。

InvalidStateError" DOMException をスローします。 responseType が空文字列または "document" でない場合。

responseXML ゲッターの手順は以下の通りです:

  1. this の 応答型が空文字列でも "document" でもない場合、 "InvalidStateError" DOMException を投げる。

  2. this の 状態が 完了 でない場合、null を返す。

  3. アサート:this の 応答オブジェクトは failure でない。

  4. this の 応答オブジェクトが非 null である場合、それを返す。

  5. 文書 応答を設定するを this について行う。

  6. this の 応答オブジェクトを返す。

3.7. イベント概要

このセクションは規範的ではありません。

次のイベントが XMLHttpRequest または XMLHttpRequestUpload オブジェクト上でディスパッチされます:

イベント名 インターフェース ディスパッチされるタイミング…
readystatechange Event readyState 属性が値を変更したとき。ただし、UNSENT に変更される場合を除く。
loadstart ProgressEvent フェッチが開始されたとき。
progress ProgressEvent データを送信中。
abort ProgressEvent フェッチが中止されたとき。例えば、abort() メソッドを呼び出した場合。
error ProgressEvent フェッチが失敗したとき。
load ProgressEvent フェッチが成功したとき。
timeout ProgressEvent フェッチが完了する前に、著者が指定したタイムアウトが経過したとき。
loadend ProgressEvent フェッチが完了したとき(成功または失敗)。

4. インターフェース FormData

typedef (File or USVString) FormDataEntryValue;

[Exposed=(Window,Worker)]
interface FormData {
  constructor(optional HTMLFormElement form, optional HTMLElement? submitter = null);

  undefined append(USVString name, USVString value);
  undefined append(USVString name, Blob blobValue, optional USVString filename);
  undefined delete(USVString name);
  FormDataEntryValue? get(USVString name);
  sequence<FormDataEntryValue> getAll(USVString name);
  boolean has(USVString name);
  undefined set(USVString name, USVString value);
  undefined set(USVString name, Blob blobValue, optional USVString filename);
  iterable<USVString, FormDataEntryValue>;
};

各FormData オブジェクトには関連付けられた エントリリスト( エントリリスト)が存在します。それは初期状態では空です。

このセクションでは以前、 エントリ、エントリの 名前および 値、そして エントリを作成するアルゴリズムを定義していました。これらの定義は HTML標準に移動されました。[HTML]

new FormData(form, submitter) コンストラクタの手順は以下の通りです:

  1. formが指定された場合、以下を実行します:

    1. submitterがnullではない場合、以下を実行します:

      1. submitterが送信ボタンでない場合、例外をスローします。 TypeError。

      2. submitterのフォーム所有者がformでない場合、例外をスローします。 "NotFoundError" DOMException。

    2. listを、エントリリストを構築する結果として formとsubmitterを用いて取得します。

    3. listがnullの場合、例外をスローします。 "InvalidStateError" DOMException。

    4. thisのエントリリストをlistに設定します。

append(name, value) メソッドと append(name, blobValue, filename) メソッドの手順は以下の通りです:

  1. valueを、指定された場合はvalue、それ以外の場合はblobValueとします。

  2. entryをエントリを作成するの結果として name、value、および指定された場合はfilenameを用いて取得します。

  3. 追加しますentryをthisの エントリリストに。

valueおよびblobValueという名前の引数がある理由は、 XMLHttpRequest標準を作成するために使用された編集ソフトウェアの制限によるものです。

The delete(name) メソッド手順は、削除することである:エントリーのうち、その 名前が name であるものすべてを、this の エントリー リストから削除する。

The get(name) メソッド 手順は次のとおり:

  1. エントリーのうち、その名前が name であるものが、this の エントリーリスト内に存在しない場合、null を返す。

  2. 値を返す:エントリーのうち、その 名前が name である最初のものの値を、this の エントリーリストから返す。

The getAll(name) メソッド手順は次のとおり:

  1. エントリーのうち、その名前が name であるものが、this の エントリーリスト内に存在しない場合、空のリストを返す。

  2. 値を返す:すべての エントリーのうち、その 名前が name であるものの値を、順に、this の エントリーリストから返す。

The has(name) メソッド 手順は、エントリーのうち、その 名前が name であるものが、this の エントリー リスト内に存在する場合は true を返し、そうでない場合は false を返すことである。

The set(name, value) および set(name, blobValue, filename) メソッド手順は次のとおり:

  1. value を、与えられている場合は value、そうでない場合は blobValue とする。

  2. entry を、 name、value、および与えられている場合は filename を用いてエントリーを作成する結果とする。

  3. エントリーのうち、その名前が name であるものが、this の エントリーリスト 内に存在する場合、そのような最初の エントリーを entry で置換し、その他を削除する。

  4. そうでない場合、entry を this の エントリーリストに追加する。

value という名前の引数と blobValue が存在する理由は、XMLHttpRequest Standard を記述するために使用されている編集ソフトウェアの制限によるものである。

反復処理する値ペアは、this の エントリーリストの エントリーであり、キーは名前、 値は値である。

5. インターフェース ProgressEvent

[Exposed=(Window,Worker)]
interface ProgressEvent : Event {
  constructor(DOMString type, optional ProgressEventInit eventInitDict = {});

  readonly attribute boolean lengthComputable;
  readonly attribute double loaded;
  readonly attribute double total;
};

dictionary ProgressEventInit : EventInit {
  boolean lengthComputable = false;
  double loaded = 0;
  double total = 0;
};

イベント にProgressEvent インターフェースを使用して、進行状況を示します。

lengthComputable、 loaded、 および total のゲッターステップは、それらが初期化された値を返すことです。

5.1. ProgressEvent インターフェースを使用してイベントを発火する

進行イベントを発火するには、 eという名前のイベントをtargetで発火することを意味します。transmittedと lengthを指定して、ProgressEventを使用し、 loaded 属性をtransmittedに初期化し、lengthが0でない場合、 lengthComputable 属性をtrueに初期化し、 total 属性をlengthに初期化します。

5.2. ProgressEvent インターフェースを使用するイベントの推奨される名前

このセクションは非規範的です。

イベント にProgressEvent インターフェースを使用する場合の推奨されるtype 属性値は以下の表にまとめられています。 仕様の編集者は、具体的なシナリオに合わせて詳細を調整する自由がありますが、 この分野に詳しい人々からの意見を得るため、WHATWGコミュニティと議論することを強く推奨します。

type 属性値 説明 回数 タイミング
loadstart 進行が開始された。 1回。 最初に。
progress 進行中。 1回以上。 loadstartが ディスパッチされた後。
error 進行に失敗した。 0回または1回(相互排他)。 progressの最後が ディスパッチされた後。
abort 進行が終了された。
timeout 設定された時間切れにより進行が終了した。
load 進行が成功した。
loadend 進行が停止した。 1回。 error、abort、 timeout、またはloadが ディスパッチされた後。

error、abort、timeout、 およびloadイベントタイプは相互排他です。

ウェブプラットフォーム全体でerror、abort、 timeout、およびloadイベントタイプは、 bubbles およびcancelable 属性をfalseに初期化しているため、一貫性を保つために、 イベント にProgressEvent インターフェースを使用する場合も同様にすることを推奨します。

5.3. セキュリティの考慮事項

オリジン間リクエストでは、例えばFetch標準で定義されている CORSプロトコル のようなオプトインが使用されなければなりません。 それにより、イベントが ProgressEvent インターフェースを使用して ディスパッチ される際に、通常は得られない情報(例: サイズ)が明らかになる可能性があるためです。 [FETCH]

5.4. 例

この例では、XMLHttpRequest と以前のセクションで定義された概念、 さらにHTMLの progress 要素を組み合わせて使用し、リソースを フェッチ するプロセスを表示します。

<!DOCTYPE html>
<title>マジカルユニコーンを待っています</title>
<progress id=p></progress>
<script>
  var progressBar = document.getElementById("p"),
      client = new XMLHttpRequest()
  client.open("GET", "magical-unicorns")
  client.onprogress = function(pe) {
    if(pe.lengthComputable) {
      progressBar.max = pe.total
      progressBar.value = pe.loaded
    }
  }
  client.onloadend = function(pe) {
    progressBar.value = pe.loaded
  }
  client.send()
</script>

完全な動作コードは、もちろんより詳細で、ネットワークエラーやエンドユーザーによるリクエストの終了など、さらに多くのシナリオに対応する必要があります。

謝辞

次の方々に感謝します: Addison Phillips、 Adrian Bateman、 Ahmed Kamel、 Alan Thomas、 Alex Hopmann、 Alex Vincent、 Alexey Proskuryakov、 Ali Alabbas、 Andrea Marchesini、 Asbjørn Ulsberg、 Bertrand Guay-Paquet、 Björn Höhrmann、 Boris Zbarsky、 Caitlin Potter、 Cameron McCormack、 白丞祐 (Cheng-You Bai)、 Chris Marrin、 Christophe Jolif、 Charles McCathieNevile、 Chirag S Kumar、 Dan Winship、 David Andersson、 David Flanagan、 David Håsäther、 David Levin、 Dean Jackson、 Denis Sureau、 Domenic Denicola、 Dominik Röttsches、 Doug Schepers、 Douglas Livingstone、 Elliott Sprehn、 Elliotte Harold、 Eric Lawrence、 Eric Uhrhane、 Erik Arvidsson、 Erik Dahlström、 Feras Moussa、 Gideon Cohn、 Glenn Adams、 Gorm Haug Eriksen、 Gregory Terzian、 Håkon Wium Lie、 Hallvord R. M. Steen、 Henri Sivonen、 Hiroshige Hayashizaki、 Huub Schaeks、 Ian Clelland、 Ian Davis、 Ian Hickson、 Ivan Herman、 Jake Archibald、 Jared Jacobs、 Jarred Nicholls、 Jeff Walden、 Jens Lindström、 Jim Deegan、 Jim Ley、 Joe Farro、 Jonas Sicking、 Julian Reschke、 송정기 (Jungkee Song)、 呂康豪 (Kang-Hao Lu)、 Karl Dubost、 Keith Yeung、 田村健人 (Kent TAMURA)、 Lachlan Hunt、 Maciej Stachowiak、 Magnus Kristiansen、 Manish Goregaokar、 Marc Hadley、 Marcos Caceres、 Mark Baker、 Mark Birbeck、 Mark Nottingham、 Mark S. Miller、 Martin Hassman、 Mike Pennisi、 Mohamed Zergaoui、 Ms2ger、 Noam Rosenthal、 Odin Hørthe Omdal、 Olli Pettay、 Pawel Glowacki、 Peter Michaux、 Philip Jägenstedt、 Philip Taylor、 Rashika Jaggi、 Robin Berjon、 Rune F. Halvorsen、 Ruud Steltenpool、 Ryo Onodera、 Sam Sneddon、 Sergiu Dumitriu、 Shivakumar Jagalur Matt、 Sigbjørn Finne、 Simon Pieters、 Stewart Brodie、 Sunava Dutta、 Takeshi Kurosawa、 Takeshi Yoshino、 Thomas Roessler、 Thomas Wisniewski、 Tom Magliery、 Travis Leithead、 triple-underscore、 Yaron Tausky、 Yehuda Katz、 Youenn Fablet、 そしてZhenbin Xu。 この標準への貢献に感謝します。

特に、最初にXMLHttpRequest インターフェースを実装したMicrosoftの社員の皆様に感謝します。このインターフェースは最初にWindows Internet Explorerブラウザで広く展開されました。

Ian Hickson氏に特に感謝します。同氏がHTML標準(当時はWeb Applications 1.0)でこの仕様の初期バージョンを起草しました。[HTML]

W3C SVG WGに特に感謝します。同グループがProgressEvent クラスをSVG Micro DOMの一部として初めて起草しました。SVG Micro DOMを参照。

この標準は、 Anne van Kesteren氏(Apple、 annevk@annevk.nl)によって執筆されました。

知的財産権

Copyright © WHATWG (Apple, Google, Mozilla, Microsoft)。この作品はCreative Commons Attribution 4.0 International Licenseの下でライセンスされています。この中の一部がソースコードに取り込まれている場合、その部分はBSD 3-Clause Licenseの下でライセンスされます。

これは現行標準です。特許審査バージョンに興味がある方は現行標準レビュードラフトをご覧ください。

索引

この仕様で定義されている用語

参照で定義されている用語

参考文献

規範参照

[DOM]
Anne van Kesteren. DOM Standard. 現行標準. URL: https://dom.spec.whatwg.org/
[DOM-PARSING]
Travis Leithead. DOM Parsing and Serialization. URL: https://w3c.github.io/DOM-Parsing/
[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[ENCODING]
Anne van Kesteren. Encoding Standard. 現行標準. URL: https://encoding.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard. 現行標準. URL: https://fetch.spec.whatwg.org/
[FILEAPI]
Marijn Kruisselbrink. File API. URL: https://w3c.github.io/FileAPI/
[HTML]
Anne van Kesteren; et al. HTML Standard. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. 現行標準. URL: https://infra.spec.whatwg.org/
[MIMESNIFF]
Gordon P. Hemsley. MIME Sniffing Standard. 現行標準. URL: https://mimesniff.spec.whatwg.org/
[URL]
Anne van Kesteren. URL Standard. 現行標準. URL: https://url.spec.whatwg.org/
[WEBDRIVER-BIDI]
James Graham; Alex Rudenko; Maksim Sadym. WebDriver BiDi. URL: https://w3c.github.io/webdriver-bidi/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. 現行標準. URL: https://webidl.spec.whatwg.org/
[XML]
Tim Bray; et al. Extensible Markup Language (XML) 1.0 (Fifth Edition). 2008年11月26日. REC. URL: https://www.w3.org/TR/xml/
[XML-NAMES]
Tim Bray; et al. Namespaces in XML 1.0 (Third Edition). 2009年12月8日. REC. URL: https://www.w3.org/TR/xml-names/

IDL索引

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequestEventTarget : EventTarget {
  // event handlers
  attribute EventHandler onloadstart;
  attribute EventHandler onprogress;
  attribute EventHandler onabort;
  attribute EventHandler onerror;
  attribute EventHandler onload;
  attribute EventHandler ontimeout;
  attribute EventHandler onloadend;
};

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {
};

enum XMLHttpRequestResponseType {
  "",
  "arraybuffer",
  "blob",
  "document",
  "json",
  "text"
};

[Exposed=(Window,DedicatedWorker,SharedWorker)]
interface XMLHttpRequest : XMLHttpRequestEventTarget {
  constructor();

  // event handler
  attribute EventHandler onreadystatechange;

  // states
  const unsigned short UNSENT = 0;
  const unsigned short OPENED = 1;
  const unsigned short HEADERS_RECEIVED = 2;
  const unsigned short LOADING = 3;
  const unsigned short DONE = 4;
  readonly attribute unsigned short readyState;

  // request
  undefined open(ByteString method, USVString url);
  undefined open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null);
  undefined setRequestHeader(ByteString name, ByteString value);
           attribute unsigned long timeout;
           attribute boolean withCredentials;
  [SameObject] readonly attribute XMLHttpRequestUpload upload;
  undefined send(optional (Document or XMLHttpRequestBodyInit)? body = null);
  undefined abort();

  // response
  readonly attribute USVString responseURL;
  readonly attribute unsigned short status;
  readonly attribute ByteString statusText;
  ByteString? getResponseHeader(ByteString name);
  ByteString getAllResponseHeaders();
  undefined overrideMimeType(DOMString mime);
           attribute XMLHttpRequestResponseType responseType;
  readonly attribute any response;
  readonly attribute USVString responseText;
  [Exposed=Window] readonly attribute Document? responseXML;
};

typedef (File or USVString) FormDataEntryValue;

[Exposed=(Window,Worker)]
interface FormData {
  constructor(optional HTMLFormElement form, optional HTMLElement? submitter = null);

  undefined append(USVString name, USVString value);
  undefined append(USVString name, Blob blobValue, optional USVString filename);
  undefined delete(USVString name);
  FormDataEntryValue? get(USVString name);
  sequence<FormDataEntryValue> getAll(USVString name);
  boolean has(USVString name);
  undefined set(USVString name, USVString value);
  undefined set(USVString name, Blob blobValue, optional USVString filename);
  iterable<USVString, FormDataEntryValue>;
};

[Exposed=(Window,Worker)]
interface ProgressEvent : Event {
  constructor(DOMString type, optional ProgressEventInit eventInitDict = {});

  readonly attribute boolean lengthComputable;
  readonly attribute double loaded;
  readonly attribute double total;
};

dictionary ProgressEventInit : EventInit {
  boolean lengthComputable = false;
  double loaded = 0;
  double total = 0;
};

✔MDN

FormData/FormData

In all current engines.

Firefox4+Safari5+Chrome5+
Opera12+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12+
✔MDN

FormData/append

In all current engines.

Firefox4+Safari5+Chrome5+
Opera12+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12+
✔MDN

FormData/delete

In all current engines.

Firefox39+Safari11.1+Chrome50+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

FormData/get

In all current engines.

Firefox39+Safari11.1+Chrome50+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

FormData/getAll

In all current engines.

Firefox39+Safari11.1+Chrome50+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

FormData/has

In all current engines.

Firefox39+Safari11.1+Chrome50+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

FormData/set

In all current engines.

Firefox39+Safari11.1+Chrome50+
Opera?Edge79+
Edge (Legacy)18IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

FormData

In all current engines.

Firefox4+Safari5+Chrome5+
Opera12+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari5+Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12+
Node.js18.0.0+
✔MDN

ProgressEvent/ProgressEvent

In all current engines.

Firefox18+Safari6+Chrome16+
Opera12.1+Edge79+
Edge (Legacy)14+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

ProgressEvent/lengthComputable

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

ProgressEvent/loaded

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

ProgressEvent/total

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

ProgressEvent

In all current engines.

Firefox3.5+Safari3.1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/XMLHttpRequest

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/abort

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/abort_event

In all current engines.

Firefox3.5+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/abort_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/abort_event

In all current engines.

Firefox3.5+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/abort_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/error_event

In all current engines.

Firefox1+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/error_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/error_event

In all current engines.

Firefox1+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/error_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/getAllResponseHeaders

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/getResponseHeader

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/load_event

In all current engines.

Firefox1+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/load_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/load_event

In all current engines.

Firefox1+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE9+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/load_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/loadend_event

In all current engines.

Firefox5+Safari4+Chrome18+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/loadend_event

In all current engines.

Firefox5+Safari4+Chrome18+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/loadend_event

In all current engines.

Firefox5+Safari4+Chrome18+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/loadend_event

In all current engines.

Firefox5+Safari4+Chrome18+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/loadstart_event

In all current engines.

Firefox3.5+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/loadstart_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/loadstart_event

In all current engines.

Firefox3.5+Safari1.3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/loadstart_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/open

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/overrideMimeType

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE11
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/progress_event

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/progress_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/progress_event

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+

XMLHttpRequestUpload/progress_event

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/readyState

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/readystatechange_event

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/readystatechange_event

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera9+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/response

In all current engines.

Firefox6+Safari5.1+Chrome9+
Opera11.6+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView3+Samsung Internet?Opera Mobile12+
✔MDN

XMLHttpRequest/responseText

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/responseType

In all current engines.

Firefox6+Safari5.1+Chrome31+
Opera18+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android50+iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile18+
✔MDN

XMLHttpRequest/responseURL

In all current engines.

Firefox32+Safari8+Chrome37+
Opera?Edge79+
Edge (Legacy)14+IENone
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile?
✔MDN

XMLHttpRequest/responseXML

In all current engines.

Firefox1+Safari3+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari1+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/send

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/setRequestHeader

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE5+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/status

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequest/statusText

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/timeout

In all current engines.

Firefox12+Safari7+Chrome29+
Opera17+Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile18+
✔MDN

XMLHttpRequest/timeout_event

In all current engines.

Firefox12+Safari7+Chrome29+
Opera?Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet1.0+Opera Mobile?

XMLHttpRequestUpload/timeout_event

In all current engines.

Firefox12+Safari7+Chrome29+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet1.0+Opera Mobile?
✔MDN

XMLHttpRequest/timeout_event

In all current engines.

Firefox12+Safari7+Chrome29+
Opera?Edge79+
Edge (Legacy)12+IE8+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet1.0+Opera Mobile?

XMLHttpRequestUpload/timeout_event

In all current engines.

Firefox12+Safari7+Chrome29+
Opera?Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet1.0+Opera Mobile?
✔MDN

XMLHttpRequest/upload

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequest/withCredentials

In all current engines.

Firefox3.5+Safari4+Chrome3+
Opera12+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12+
✔MDN

XMLHttpRequest

In all current engines.

Firefox1+Safari1.2+Chrome1+
Opera8+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile10.1+
✔MDN

XMLHttpRequestEventTarget

In all current engines.

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (Legacy)12+IE7+
Firefox for Android?iOS Safari?Chrome for Android?Android WebView?Samsung Internet?Opera Mobile12.1+
✔MDN

XMLHttpRequestUpload

In all current engines.

Firefox3.5+Safari4+Chrome2+
Opera12.1+Edge79+
Edge (Legacy)12+IE10+
Firefox for Android?iOS Safari3+Chrome for Android?Android WebView37+Samsung Internet?Opera Mobile12.1+