XML DOM - XMLHttpRequestオブジェクト

XMLHttpRequest オブジェクト

XMLHttpRequestオブジェクトはHTTPプロトコルへの完全なアクセスを提供し、POSTおよびHEADリクエスト、通常のGETリクエストを行う能力があります。XMLHttpRequestは、Webサーバーの応答を同期または非同期に返し、テキストまたはDOMドキュメントの形式で内容を返すことができます。

XMLHttpRequestと名前がついているにもかかわらず、XMLドキュメントと一緒に使用されるに限られていません:どのようなテキストドキュメントを受け取ることができます。

XMLHttpRequestオブジェクトは、 AJAX のWebアプリケーションアーキテクチャの重要な機能の一つです。

ブラウザサポート

XMLHttpRequest はすべての現代ブラウザで良いサポートを受けています。唯一のブラウザ依存性は、XMLHttpRequest オブジェクトの作成に関連しています。IE 5およびIE 6では、特定のIEのActiveXObject()構造関数を使用する必要があります。以下の XMLHttpRequest オブジェクト この節で紹介しています。

W3C標準化

XMLHttpRequestオブジェクトは標準化されていませんが、W3Cは標準化の作業を開始しました。このマニュアルに記載されている内容は、標準化の作業草案に基づいています。

現在のXMLHttpRequest実装は相当一貫していますが、標準と微細な差があります。例えば、実装がnullを返す場合がありますが、標準では空文字列を要求します。または、実装がreadyStateを3に設定してもすべての応答ヘッダーが利用可能であることを保証しません。

属性

readyState

HTTPリクエストの状態。XMLHttpRequestが最初に作成されたとき、この属性の値は0から始まり、完全なHTTP応答を受け取るまで4に増加します。

5つの状態のそれぞれには関連する非公式な名前があります。以下に状態、名前、意味を示します:

状態 名前 説明
0 Uninitialized 初期状態です。XMLHttpRequestオブジェクトが作成されたか、abort()メソッドでリセットされました。
1 Open open()メソッドが呼び出されましたが、send()メソッドが呼び出されていません。リクエストはまだ送信されていません。
2 Sent Send()メソッドが呼び出され、HTTPリクエストがWebサーバーに送信されました。応答を受信していません。
3 Receiving すべての応答ヘッダーが受け取られました。応答体の受信が開始されましたが、まだ完了していません。
4 Loaded HTTP応答が完全に受け取られました。

readyStateの値は、abort()やopen()メソッドが処理中のリクエストで呼び出された場合を除いて減少しません。この属性の値が増えるたびに、onreadystatechangeイベントハンドラがトリガーされます。

responseText

これまでにサーバーが受け取った応答体(ヘッダーを含まない)またはデータがまだ受け取られていない場合、空文字列です。

readyStateが3未満の場合、この属性は空文字列です。readyStateが3の場合、この属性はまだ受け取った応答部分を返します。readyStateが4の場合、この属性は完全な応答体を保存します。

応答に指定されたエンコードのヘッダーが含まれている場合、そのエンコードを使用します。そうでない場合、Unicode UTF-8を使用すると仮定します。

responseXML

リクエストの応答を、XMLとして解析し、 Document オブジェクトを返信。

status

サーバーが返信する HTTP状態コード、例えば200は成功を示し、404は"Not Found"エラーメッセージを示します。readyStateが3未満の場合にこの属性を読み取ると例外が発生します。

statusText

この属性は名前で指定し、HTTPリクエストの状態コードを示します。例えば、状態が200の場合は"OK"、404の場合は"Not Found"です。status属性と同様に、readyStateが3未満の場合にこの属性を読み取ると例外が発生します。

イベントハンドラ

onreadystatechange

readyState属性が変更されたときに呼び出されるイベントハンドラーファンクションです。readyStateが3の場合、複数回呼び出されることもあります。

メソッド

abort()

現在の応答をキャンセルし、接続を閉じ、すべての未決のネットワークアクティビティを終了します。

このメソッドはXMLHttpRequestオブジェクトをreadyStateが0の状態にリセットし、すべての未決のネットワークアクティビティをキャンセルします。例えば、リクエストが長時間続いた場合や、応答がもはや必要でない場合にこのメソッドを呼び出すことができます。

getAllResponseHeaders()

HTTP応答ヘッダーを未解析の文字列として返します。

readyStateが3未満の場合、このメソッドはnullを返します。それ以外の場合、サーバーから送信されたすべてのHTTP応答ヘッダーを返します。ヘッダーは単一の文字列として返され、各行がヘッダーです。各行は改行符"\r\n"で区切られます。

getResponseHeader()

指定されたHTTP応答ヘッダーの値を返します。引数は返されるHTTP応答ヘッダーの名前です。大文字小文字を問わず使用できますが、ヘッダー名と比較する際は大文字小文字を区別しません。

このメソッドの返値は指定されたHTTP応答ヘッダーの値です。このヘッダーを受け取っていないか、readyStateが3未満の場合は空文字列です。指定された名前のヘッダーが複数ある場合、値がカンマとスペースで区切られて連結されて返されます。

open()

HTTPリクエストパラメータを初期化します。例えば、URLやHTTPメソッドなどですが、リクエストを送信しません。

send()

HTTPリクエストを送信し、open()メソッドに渡された引数と、このメソッドに渡されたオプションのリクエスト体を使用します。

setRequestHeader()

開かれているが送信されていないリクエストにHTTPリクエストを設定または追加します。

XMLHttpRequest.open()

HTTP リクエストパラメータを初期化する

構文

open(method, url, async, username, password)

method パラメータはリクエストに使用される HTTP メソッドです。値には GET、POST、HEAD が含まれます。

url パラメータはリクエストの主体です。ほとんどのブラウザはソースネームセキュリティポリシーを実施し、この URL がスクリプトを含むテキストの同じホスト名とポートに一致する必要があります。

async パラメータは、リクエストが非同期に実行されるかどうかを示します。このパラメータが false である場合、リクエストは同期で、send() に対する後続の呼び出しは、応答が完全に受け取られるまでブロックされます。このパラメータが true または省略されている場合、リクエストは非同期で、通常 onreadystatechange イベントハンドラが必要です。

username と password パラメータはオプションで、URL に必要な認証資格を提供します。指定された場合、これらは URL に指定された任何認証資格を覆します。

説明

このメソッドは send() メソッドで後で使用するためにリクエストパラメータを初期化します。readyState を 1 に設定し、以前に指定されたすべてのリクエストヘッダーと以前に受け取ったすべてのレスポンスヘッダーを削除し、responseText、responseXML、status、statusText パラメータをデフォルト値に設定します。readyState が 0 である場合(XMLHttpRequest オブジェクトが作成されたばかりまたは abort() メソッドが呼び出された場合)および readyState が 4 である場合(レスポンスが受け取られた場合)、このメソッドの呼び出しは安全です。他のどの状態でも呼び出された場合、open() メソッドの行動は指定されます。

send() メソッドで使用するためのリクエストパラメータを保存し、XMLHttpRequest オブジェクトを再利用するためにリセットする以外、open() メソッドには他の行動はありません。特に注意すべきは、このメソッドが呼び出されたときには、実装によってはウェブサーバーへのネットワーク接続を開くことはないという点です。

XMLHttpRequest.send()

HTTP リクエストを送信する

構文

send(body)

open() メソッドで指定された HTTP メソッドが POST または PUT である場合、body パラメータはリクエストボディとして指定され、文字列または Document オブジェクトリクエストボディが必須でない場合、このパラメータは null になります。他のどのメソッドでも、このパラメータは使用不可で null に設定されるべきです(一部の実装ではパラメータの省略が許可されていません)。

説明

このメソッドはHTTPリクエストの送信を引き起こします。open()が以前に呼び出されていない場合、または具体的には、readyStateが1でない場合、send()は例外をスローします。そうでない場合、HTTPリクエストを送信し、以下の要素で構成されます:

  • open()が以前に呼び出された場合のHTTPメソッド、URL、および認証資格(あれば)。
  • setRequestHeader()が以前に呼び出された場合の指定されたリクエストヘッダー(あれば)。
  • このメソッドに渡される body パラメータ

一旦リクエストが発行されると、send()はreadyStateを2に設定し、onreadystatechangeイベントハンドラをトリガーします。

以前に呼び出されたopen()パラメータのasyncがfalseの場合、このメソッドはブロッキングし、returnしないで、readyStateが4に達し、サーバーの応答が完全に受信されるまで待ちます。そうでない場合、asyncパラメータがtrueであるか、または省略されている場合、send()はすぐにreturnし、後で説明するように、サーバーの応答がバックグラウンドスレッドで処理されます。

サーバーからのHTTPリダイレクトが返された場合、send() メソッドまたはバックグラウンドスレッドが自動的にリダイレクトに従います。すべてのHTTPレスポンスヘッダーが受信されると、send()またはバックグラウンドスレッドがreadyStateを3に設定し、onreadystatechangeイベントハンドラをトリガーします。レスポンスが長い場合、send()またはバックグラウンドスレッドが状態3でonreadystatechangeイベントハンドラをトリガーする可能性があります:これはダウンロードプロセスのインディケーターとして使用できます。最後に、レスポンスが完了すると、send()またはバックグラウンドスレッドがreadyStateを4に設定し、最後にイベントハンドラをトリガーします。

XMLHttpRequest.setRequestHeader()

構文

setRequestHeader(name, value)

name パラメータは設定するヘッダーの名前です。このパラメータにはスペース、コロン、または改行を含まないべきです。

value パラメータはヘッダーの値です。このパラメータには改行を含まないべきです。

説明

setRequestHeader() メソッドは、HTTP 请求のヘッダーを指定し、send() 調用を通じて発行されるリクエストに含まれるべきです。このメソッドは、readyState が 1 のときのみ呼び出すことができます。例えば、open() を呼び出した後に、send() を呼び出す前にです。

指定名のヘッダーが既に指定されている場合、そのヘッダーの新しい値は:以前に指定された値に、コマ、スペース、およびこの呼び出しで指定された値を加えたものです。

open() 調用が認証情報を指定した場合、XMLHttpRequest は適切な Authorization リクエストヘッダーを自動的に送信します。ただし、setRequestHeader() を使用してこのヘッダーを追加することもできます。同様に、Web サーバーが open() に渡された URL に関連する cookie を保存して渡している場合、適切な Cookie や Cookie2 ヘッダーも自動的にリクエストに含まれます。これらの cookie をヘッダーに追加するには、setRequestHeader() を呼び出すことができます。XMLHttpRequest は User-Agent ヘッダーにもデフォルト値を提供できます。これを行った場合、指定した値はデフォルト値の後に追加されます。

一部のリクエストヘッダーは、HTTPプロトコルに従うためにこのメソッドではなく、XMLHttpRequest によって自動的に設定されます。これには、プロキシに関連する以下のヘッダーが含まれます:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range