Ajax (XMLHttpRequest)
概要
XMLHttpRequestは、Microsoftによって設計され、Mozilla、Apple、Googleによって採用されたJavaScriptオブジェクトです。 現在では、W3Cによって標準化されています。 これは、ページ全体のリフレッシュをする必要なく、URLからデータを簡単に取得する方法を提供してくれます。 Webページは、ユーザーが何が起こったのか分からず混乱すること無く、ページ内の一部分を更新することが可能です。 XMLHttpRequestはAjaxプログラミングで頻繁に使用されます。
XMLHttpRequestという名前にも関わらず、XMLに限らず幾つかのタイプのデータを取得することが可能で、 HTTP以外のプロトコル(fileとftpを含む)もサポートします。
XMLHttpRequestのインスタンスを作成するには、単に下記のようにするだけです。
var myRequest = new XMLHttpRequest();
XMLHttpRequestの詳細な使用方法については、XMLHttpRequestの使用方法を確認してください。
プロパティ
属性 | 説明 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
onreadystatechange |
型:
警告: これは同期リクエストと一緒に使用されるべきではありません。また、ネイティブコードから使用してはいけません。 |
||||||||||||||||||
readyState |
型: リクエストの状態です。
|
||||||||||||||||||
response |
型:
responseTypeに沿ったArrayBuffer、Blob、Document、
JavaScriptオブジェクト("json"のための)、
文字列としてのresponseのbody実体になります。
リクエストが完了していない、または成功しなかった場合は |
||||||||||||||||||
responseText 読取専用 |
型:
リクエストへのテキストとしてのレスポンスになります。
リクエストが成功しない、またはまだ送信されていない場合は |
||||||||||||||||||
responseType |
型: レスポンスの種類を変更するように、設定することが出来ます。
注意: WebKitビルド528と同様に、Gecko 11.0(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8)以降では、
同期リクエスト実行の際にresponseType属性の使用させないようになりました。(翻訳に自信無し)
それを行おうとすると、 |
||||||||||||||||||
responseXML 読取専用 |
型:
DOMドキュメントオブジェクトとしての、リクエストに対するレスポンスです。
もし、リクエストが失敗、まだ送信されていない、またはXML・HTMLにパース出来なければ 注意: もし、サーバがtext/xml Content-Typeヘッダーを適用しない場合、 overrideMimeType()を使用して、XMLHttpRequestを強制的にXMLとしてパースすることが出来ます。 |
||||||||||||||||||
status 読取専用 |
型: リクエストに対するレスポンスのステータスです。 これは、HTTPのコードになります。(例えば、200はリクエスト成功を意味します。) |
||||||||||||||||||
statusText 読取専用 |
型: HTTPサーバによって返されるレスポンス文字列です。 statusとは異なり、これにはレスポンスメッセージのテキストが全て含まれます。(例: "200 OK") |
||||||||||||||||||
timeout |
型: リクエストが自動終了されるまで確保する時間をミリ秒単位で指定します。 値が0(デフォルト)の場合、タイムアウト無しとみなされます。 注意: 自身のwindowでの同期リクエストでは、timeoutは使用できないかもしれません。 |
||||||||||||||||||
ontimeout |
型: このJavaScript関数オブジェクトは、リクエストがタイムアウトした際に呼び出されます。 |
||||||||||||||||||
upload |
型: アップロードプロセスは、アップロードのためのイベントリスナーを追加することによって追跡することが可能になります。 |
||||||||||||||||||
withCredentials |
型:
cross-site(クロスサイト)のAccess-Controlリクエストは、
Cookieまたは認証ヘッダーのような証明を使用して作られるべきか否かを指定します。
デフォルトは 注意: これは同じサイト内でのリクエストであれば、影響を及ぼすことはありません。
注意: Gecko 11.0 (Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8)以降、
同期リクエスト実行時に、GeckoはwithCredentials属性を使用させないようになりました。
それをしようと試みると、 |
コンストラクタ
XMLHttpRequest()
コンストラクタはXMLHttpRequestをインスタンス化します。 他のメソッドを呼び出す前に、これを行う必要があります。
XMLHttpRequest (
JSObject objParameters
);
メソッド
abort()
もし既にリクエストが送信されていた場合、それを中断します。
getAllResponseHeaders()
DOMString getAllResponseHeaders();
文字列として全てのレスポンスヘッダーを返します。レスポンスを何も受け取っていなければ、null
になります。
注意: マルチパートリクエストのために、これは元のチャンネルでは無く、現在のリクエストの一部からヘッダーを返します。
getResponseHeader()
DOMString? getResponseHeader(DOMString header);
指定したヘッダーのテキストを含む文字列を返します。
レスポンスをまだ受け取っていない、またはレスポンス内にヘッダーが存在しない場合はnull
になります。
open()
リクエストを初期化します。 このメソッドは、openRequest()を使用する代わりにネイティブコードからリクエストを初期化するために、JavaScriptコードから使用されます。
注意: 既にアクティブなリクエスト(open()
またはopenRequest()
が既に呼ばれていた)に対して、
このメソッドを呼び出すのは、abort()
を呼び出すのと同等です。
void open(
DOMString method,
DOMString url,
optional boolean async,
optional DOMString user,
optional DOMString password
);
引数 | 説明 |
---|---|
method |
型: "GET"、"POST"、"PUT"、"DELETE"のような、使用するHTTPメソッドを指定します。 HTTP(S)では無いURLでは無視されます。 |
url |
型: リクエストを送信するURLです。 |
[async] |
型:
初期値がtrueの任意の真偽値パラメータで、非同期で実行するか否かを指定します。
もし、この値がfalseであれば、 |
[user] |
型: 認証に使用するための任意のユーザー名を指定します。 デフォルトは空文字列です。 |
[password] |
型: 認証に使用するための任意のパスワードを指定します。 デフォルトは空文字列です。 |
overrideMimeType()
サーバから返されるMIME-typeを上書きします。
例えば、サーバがtext/xmlと返答しなかったとしても、
強制的にtext/xmlとして、一連の処理の扱いと解析を強制的に行うのに使用することが出来るかもしれません。
このメソッドは、send()
の前に呼ばれなければいけません。
void overrideMimeType(DOMString mimetype);
send()
リクエストを送信します。 もし、そのリクエストが非同期(デフォルト)であれば、このメソッドはすぐにリクエスト送信を返します。 もし、そのリクエストが同期であれば、このメソッドはレスポンスが返るまでリクエスト送信を返しません。
注意: 設定したいイベントリスナーは、send()
が呼ばれる前に設定されなければいけません。
注意: パラメータにプレーンなArrayBuffer
を使用しないように注意してください。
これはもはや、XMLHttpRequest
使用の一部ではありません。
代わりにArrayBufferView
を使用してください。(バージョン情報の互換性テーブルを参照してください。)
void send();
// void send(ArrayBuffer data); *ArrayBufferは廃止*
void send(ArrayBufferView data);
void send(Blob data);
void send(Document data);
void send(DOMString? data);
void send(FormData data);
注意
もし、data
がDocumentであれば、送信される前にシリアライズされます。
Documentを送る際に、バージョンが3より前のFirefoxでは常にUTF-8エンコーディングを使用してリクエストを送信し、
Firefox3では、body.xmlEncoding
に指定されたエンコーディングを使用して、
または未指定であればUTF-8を使用して適切にDocumentを送信します。
もし、nsIInputStream
の場合、nsIUploadChannel
のsetUploadStream()
メソッドと互換性を取る必要があります。
この場合、その値をnsIInputStream
で利用可能なavailable()
メソッドで取得し、
Content-Lengthヘッダーがリクエストに追加されます。
ストリーム(stream)の上部に含まれるヘッダーは、メッセージボディ(本文)の一部として扱われます。
ストリームのMIMEtypeは、send()
呼び出しより前にsetRequestHeader()
メソッドを使用して、
Content-Typeヘッダーの設定によって指定されるべきです。
バイナリコンテンツを送信する(ファイルアップロード等)最善の方法は、
send()
メソッドとArrayBufferViewまたはBlobsを組み合わせて使用することです。
ただし、もし文字列的(stringifiable)な生のデータを送信したいのであれば、
代わりにsendAsBinary()
メソッドか、非ネイティブの配列のスーパークラスに型指定されたStringView
を使用してください。(翻訳に自信無し)
setRequestHeader()
HTTPリクエストヘッダーの値を設定します。
setRequestHeader()
は、open()
の後、send()
の前に呼び出さなければいけません。
もし、このメソッドが同一ヘッダーで何度か呼び出されると、単一のリクエストヘッダー内にその値をマージします。
void setRequestHeader(
DOMString header,
DOMString value
);
引数 | 説明 |
---|---|
header |
値を設定するヘッダーの名前を指定します。 |
value |
ヘッダーのボディとして設定する値を指定します。 |
注意事項
-
Firefox3はデフォルトで、サーバーごとのXMLHttpRequest接続の数を6に制限していました。
(更に前のバージョンでは、この数は2でした)
インタラクティブなWebサイトでは、XMLHttpRequest接続のオープンを保持している可能性があり、
そのようなサイトと複数のセッションを開いていると、ウインドウが再描画と応答の制御が出来なくなり、
ブラウザが固まってしまうかもしれません。(翻訳に自信なし)
この値は、
about:config
の設定の中で、network.http.max-persistent-connections-per-server
を編集することで変更することが出来ます。 -
Gecko 7.0から、
setRequestHeader()
に設定されるヘッダーは、 リダイレクトの際にリクエストと一緒に送信されるようになりました。 それ以前では、リダイレクトの際にこれは送信されていませんでした。 -
リクエストが
timeout
値に達した場合、 "timeout"イベントが発生します。
Event
XMLHttpRequest
のインスタンス・プロパティとしてのonreadystatechange
は、
全てのブラウザでサポートされます。
また、様々なブラウザで追加のイベントハンドラ(onload、 onerror、 onprogress ( onprogress は非標準でIEのみ?) 等)が実装されています。 これらはFirefoxでもサポートされています。 詳細については、Using XMLHttpRequestを参照してください。
Firefoxを含む最近の多くのブラウザは、ハンドラ関数へon*
プロパティを付加した、
標準のaddEventListenerのAPIを介して、
XMLHttpRequest
のリッスンもサポートします。
ブラウザの互換性
Geckoでの注意事項
Gecko 11.0(Firefox 11.0 / Thunderbird 11.0 / SeaMonkey 2.8)では、
同期リクエスト実行時のresponseType
とwithCredentials
属性のサポートが削除されました。
この実行を試みると、NS_ERROR_DOM_INVALID_ACCESS_ERR
例外がスローされます。
この変更は、標準化のためにW3Cに提案されています。
Gecko 12.0 (Firefox 12.0 / Thunderbird 12.0 / SeaMonkey 2.9)とそれ以降のバージョンは、 XMLHttpRequestを使用したdata: URIsからの読み取りをサポートします。
Gecko 20.0 (Firefox 20.0 / Thunderbird 20.0 / SeaMonkey 2.17)は、
ArrayBufferView
の送信のサポートを追加します。
プレーンなArrayBuffer
の送信は、
もはやXMLHttpRequest
仕様の一部では無いため、非推奨として扱われるべきです。
Operaでの注意事項
Blink/Chromiumに切り替わる前のOperaでは、Opera12~15の間、responseType=json
がサポートされていました。
このサポートは、その後Blink(Opera 17)でも実装されたことで、再び追加されました。(翻訳に自信なし)
関連項目
- XMLHttpRequestについてのMDNの記事
-
W3CとブラウザベンダーによるXMLHttpRequestリファレンス
- W3C: XMLHttpRequest(基本機能)
- W3C: XMLHttpRequest(かつてはXMLHttpRequestレベル2であった基本機能を拡張した最新のドラフト)
- Microsoft Document
- Apple developers' reference
- "Using the XMLHttpRequest Object" (jibbering.com)
- XMLHttpRequest - REST and the Rich User Experience
- HTML5 Rocks - New Tricks in XMLHttpRequest2
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。