XMLHttpRequest は Microsoft によって設計され、Mozilla、Apple および Google が採用した JavaScript オブジェクトです。現在は W3C にて標準化されています。URL から データを読み出す簡単な方法を提供します。XMLHttpRequest という名前ではあるものの、XML に限らないデータ形式を取り扱うことができ、( file および ftp を含む) HTTP 以外のプロトコルもサポートしています。
XMLHttpRequest のインスタンスは、このように簡単に生成できます:
var req = new XMLHttpRequest();
XMLHttpRequest の使い方の詳細については、Using XMLHttpRequest を参照してください。
メソッド概要
XMLHttpRequest(JSObject objParameters); |
void abort(); |
DOMString getAllResponseHeaders(); |
DOMString? getResponseHeader(DOMString header); |
void open(DOMString method, DOMString url, optional boolean async, optional DOMString? user, optional DOMString? password); |
void overrideMimeType(DOMString mime); |
void send();void send(ArrayBuffer data);void send(ArrayBufferView data);void send(Blob data);void send(Document data);void send(DOMString? data);void send(FormData data); |
void setRequestHeader(DOMString header, DOMString value); |
| Non-standard methods |
|---|
[noscript] void init(in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow); |
[noscript] void openRequest(in AUTF8String method, in AUTF8String url, in boolean async, in AString user, in AString password); |
void sendAsBinary(in DOMString body); 非推奨 Gecko 31 |
プロパティ
| 属性 | 型 | 詳細 | ||||||||||||||||||
channel |
nsIChannel |
リクエストの実行の際にオブジェクトによって使われるチャンネルです。チャンネルが作成されていない場合、この値は null となります。マルチパート・リクエストにおいてこの値は、マルチパート・リクエスト中の別々のパートではなく、最初のチャンネルとなります。アクセスには昇格された権限が必要です。読み取り専用。 |
||||||||||||||||||
mozBackgroundRequest |
boolean |
オブジェクトがバックグラウンドサービスのリクエストであるかどうかを示します。 この場合において、(認証や不正な証明書の通知といった)セキュリティダイアログが通常通り表示されたのであれば、単純にリクエストが失敗したことを意味します。 |
||||||||||||||||||
mozResponseArrayBuffer 廃止 Gecko 6 |
ArrayBuffer |
リクエストに対する、JavaScript typed array 形式でのレスポンス。この値が NULL である場合、リクエストが成功しなかった、またはリクエストがまだ送信されていないかもしれません。読み取り専用。 | ||||||||||||||||||
multipart |
boolean |
レスポンスが複数のXML文書のストリームになることが予想されるかどうかを表します。 これによりサーバーからのプッシュ通信が可能になります; ひとつひとつの XML document を、このリクエスト形式で記述することにより、ドキュメントが送られてくる都度、新たな XML DOM document が生成され、 註:
true に設定された場合、最初の XMLdocument が読み込まれて以降、 onload ハンドラと他のイベントハンドラはリセットされません。そして以後、レスポンスの断片を受け取る度に onload ハンドラが呼び出されることとなります。 |
||||||||||||||||||
|
|
nsIDOMEventListener |
警告: このプロパティはネイティブコードから使用してはいけません。また、同期リクエストとともに利用するべきでもありません。
|
||||||||||||||||||
readyState |
unsigned short |
リクエストの状態です:
|
||||||||||||||||||
response |
varies |
|
||||||||||||||||||
responseText |
AString |
リクエストに対するテキスト形式でのレスポンス。リクエストの失敗または未送信の場合は null となります。読み取り専用。 | ||||||||||||||||||
responseType |
AString |
値を設定することでレスポンス型を変更することができます。これにより、サーバーに対して、どの形式のレスポンスを求めているかを表明します。
|
||||||||||||||||||
responseXML |
nsIDOMDocument |
リクエストに対する、DOM 註: サーバーが
text/xml Content-Type ヘッダを付与していない場合、overrideMimeType() を用いることで、XMLHttpRequest に強制的に XML としてパースさせることができます。 |
||||||||||||||||||
status |
unsigned long |
リクエストに対するレスポンスのステータスです。この値は HTTP リザルトコードとなります(例えばリクエストに成功した場合、status は 200 となります).読み取り専用。 |
||||||||||||||||||
statusText |
AUTF8String |
HTTP サーバーから返ってきたレスポンス文字列です。status とは異なり、("200 OK" のように)レスポンスメッセージの完全な文が含まれています。読み取り専用。 |
||||||||||||||||||
upload |
nsIXMLHttpRequestUpload |
uploadにイベントリスナを加えることにより、アップロードプロセスを追跡することができます。 |
||||||||||||||||||
withCredentials |
boolean |
クロスサイト Access-Control リクエストに cookie や 認証ヘッダといった 認証情報を使用させるかを示します。 註: 同一サイトでのリクエストに影響を与えることはありません。
デフォルト値は |
メソッド
abort()
リクエストがすでに送信されている場合、リクエストを中止します。
getAllResponseHeaders()
string getAllResponseHeaders();
文字列として、すべてのレスポンスヘッダを返します。レスポンスを何も受け取らなかった場合は null を返します。 註: マルチパートリクエストでは、オリジナルのチャンネルではなく、リクエストの現在のパートのヘッダを返します。
getResponseHeader()
ACString getResponseHeader( in AUTF8String header );
指定したヘッダ文を含む文字列を返します。レスポンスを受信していない、またはレスポンス中に指定したヘッダが存在しない場合は null を返します。
init()
C++ のコードから使うことにより、オブジェクトを初期化します。
[noscript] void init( in nsIPrincipal principal, in nsIScriptContext scriptContext, in nsPIDOMWindow ownerWindow );
引数
principal- レスポンスに用いる主体。
nullは禁止されています。 scriptContext- リクエストに用いたスクリプトコンテクスト。
nullは禁止されています。 ownerWindow- リクエストに関連するウィンドウ。
nullは禁止されています。
open()
リクエストを初期化します。このメソッドは JavaScript から使用するようにしてください。ネイティブコードからの初期化には、代わりに openRequest() を使用するようにしてください。
open() または openRequest() が既に呼び出された状況)で、このメソッドを呼び出した場合、abort() を呼び出すのと等価となります。void open( in AUTF8String method, in AUTF8String url, [optional] in boolean async, [optional] in AString user, [optional] in AString password );
引数
method- 使用する HTTP メソッド。"POST" または "GET"となります。HTTP URLでない場合は無視されます。
url- リクエストを送信する URL
async- 非同期で操作を実行するかを示す、オプションの真偽値です。デフォルトでは
trueに設定されています。falseが設定されている場合、send()メソッドはレスポンスを受信するまで返しません。trueが設定されている場合、トランザクションが完了した通知は、イベントリスナによって提供されます。multipart属性がtrueである、または例外が投げられるであろう場合、この値はtrueでなければなりません。 user- 認証を目的として使用される、ユーザー名のオプションです。デフォルトでは、空の文字列となっています。
password- 認証を目的として使用される、パスワードのオプションです。デフォルトでは、空の文字列となっています。
openRequest()
リクエストを初期化します。このメソッドは ネイティブコード から使用するようにしてください。JavaScript コードからの初期化には、代わりに open() を使用するようにしてください。open() の項目を参照してください。
overrideMimeType()
サーバーから返ってくる MIME タイプを上書きします。例えば、サーバーの返す MIME タイプに関わらず、強制的に text/xml としてストリームをパースするなどの用途に使えるでしょう。このメソッドは send() が呼び出される前に呼び出す必要があります。
void overrideMimeType( in AUTF8String mimetype );
send()
リクエストを送信します。非同期リクエストの場合(デフォルトの場合ですが)、メソッドはリクエストを送信して間もなく返ります。同期リクエストの場合、このメソッドはレスポンスが到着するまで返りません。
send() を呼び出す前に、イベントリスナを設定する必要があります。void send( [optional] in nsIVariant body );
引数
body- POST リクエストの本文として使われる場合、この値は
nsIDocument、nsIInputStream、または文字列 (ネイティブコードから呼び出している場合はnsISupportsString) のいずれかとなります。Gecko 1.9.2 からは DOMFileを、Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) からは、FormDataオブジェクトを指定できるようになりました。
脚注
body が nsIDOMDocument である場合、送信の前にシリアライズされます。nsIDOMDocument を送信するとき、Firefox 3 までのバージョンでは常に UTF-8 エンコーディングを用いてリクエストが送信されます。Firefox 3 では、正確に body.xmlEncoding で指定されている、またはエンコードの指定が無い場合は UTF-8 を用いてエンコードされたドキュメントを送信します。
body が nsIInputStreamの場合、nsIUploadChannel の setUploadStream() メソッドと互換性が無ければなりません。その場合、リクエストの Content-Length ヘッダに nsIInputStream の available() メソッドを用いて取得された値が設定されます。ッセージ本文の一部として扱われるストリームの最初には、あらゆるヘッダが含まれます。ストリームの MIME タイプは、send() よりも先に呼び出した setRequestHeader()メソッドを用いて設定された Content-Type ヘッダが指定されるはずです。
非標準
sendAsBinary()
sendAsBinary()
バイナリデータを送る、send() メソッドの亜種です。
void sendAsBinary( in DOMString body );
引数
body- DOMstring 形式のリクエスト本体です。このデータは切り捨て処理(それぞれの文字の上位バイトを削除)によって1バイト文字の文字列に変換されます。
setRequestHeader()
HTTP リクエストヘッダの値を設定します。 このメソッドを使用する前に、open() を呼び出さなくてはいけません。
void setRequestHeader( in AUTF8String header, in AUTF8String value );
引数
header- 設定されるヘッダーの名前。
value- 設定されるヘッダー本文の値。
註
- デフォルトでは、irefox 3 では
XMLHttpRequestのサーバー毎の接続数は6つずつに制限されています(それ以前のバージョンではこの値はサーバーごとに2つずつでした)。いくつかのインタラクティブな Web サイトではXMLHttpRequestの接続を開いたままにしており、そうしたサイトでは複数のセッションが開かれているために、ウィンドウの再描画が行われなかったり操作に反応しなくなるなど、ブラウザが応答しなくなるかもしれ��せん。この値はabout:config内のnetwork.http.max-persistent-connections-per-serverの設定を編集することにより変更が可能です。 - Gecko 7.0 より、
setRequestHeader()によってセットされるヘッダーが、リダイレクト時にもリクエストともに送信されるようになりました。以前では、これらのヘッダーが送信されることはありませんでした。 XMLHttpRequestは Gecko に於いてnsIXMLHttpRequest、nsIXMLHttpRequestEventTarget、およびnsIJSXMLHttpRequestインターフェースを用いて実装されています。
イベント
後に、多くのブラウザでは 追加でイベントハンドラがいくつもサポートされてきました(onload、onerror、onprogress など)。これらは Firefox でもサポートされています。詳細は、nsIXMLHttpRequestEventTarget および Using XMLHttpRequest を参照してください。
Firefox を含む最近のブラウザでは、XMLHttpRequest のイベントを監視する方法として、on* プロパティにハンドラ関数を設定する方法に加え、標準のイベントの addEventListener APIを使用してイベントを監視する方法が提供されています。
ブラウザ互換性
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| 基本機能のサポート | 1 | 1.0 |
5 (ActiveXObject により実装) 7 (XMLHttpRequest) |
? | 1.2 |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本機能のサポート | ? | 0.16 | (有) | ? | ? | ? |
参考
- XMLHttpRequest に関連する MDN の記事:
- W3C および ブラウザベンダの XMLHttpRequest リファレンス:
- W3C: XMLHttpRequest (基本機能)
- W3C: XMLHttpRequest (基本機能の拡張についての最新のエディターズドラフト。公式には XMLHttpRequest Level 2 と呼ばれています。)
- Microsoft の文書
- Apple developers' reference
- "Using the XMLHttpRequest Object" (jibbering.com)
- XMLHttpRequest - REST and the Rich User Experience

