? XMLHttpRequestオブジェクトのメソッドとプロパティ - Ajaxを用いたHTTP通信 - Ajax入門

XMLHttpRequestオブジェクトのメソッドとプロパティ

広告

実際にXMLHttpRequestオブジェクトを利用する方法を確認する前に、XMLHttpRequestオブジェクトに用意されているメソッドとプロパティについて見ていきます。

メソッド一覧

まずはメソッドです。XMLHttpRequestオブジェクトで用意されているメソッドには次のようなものがあります。

MethodDescription
abort()Stops the current request
getAllResponseHeaders()Returns complete set of headers (labels and values) as a string
getResponseHeader("headerLabel")Returns the string value of a single header label
open("method", "URL"[, asyncFlag[, "userName"[, "password"]]])Assigns destination URL, method, and other optional attributes of a pending request
send(content)Transmits the request, optionally with postable string or DOM object data
setRequestHeader("label", "value")Assigns a label/value pair to the header to be sent with a request

これらのメソッドの中でも重要なのが「open」メソッドと「send」メソッドです。

openメソッド

「open」メソッドはサーバに対するHTTPリクエストを作成します。

1番目の引数にはリクエストが「GET」なのか「POST」なのかを指定します。2番目の引数にはリクエストを送るURLを指定します。この2つの引数は必須の項目です。3番目の引数には非同期通信か同期通信かを指定します。同期通信の場合は「false」を、非同期通信の場合は「true」を指定します。省略した場合は「true」が設定されます。

同期通信にした場合はサーバに対するリクエストからの応答があるまで待ってから次の処理へ進みます。その為、処理が移った時点では既に応答が帰ってきていますので、その応答に対する処理を記述するだけなので記述は簡単になります。その代わり応答が帰ってくるまでブラウザは他の処理を行えません。

非同期通信にした場合にはリクエストを送った時点で次の処理へ進みます。その為、リクエストを送信したブラウザではすぐに他の処理を行えますが、今度は応答に対する処理を行うには、応答が帰ってきたのかどうかを別途調べる処理が必要となります。

「open」メソッドの記述例としては次のようになります。

open("GET", "http://nanntara.kanntara/test.xml", true);

sendメソッド

リクエストを実際にサーバへ送信するには「send」メソッドを使います。

引数にはサーバへ送りたいデータを記述します。「POST」を使う場合には、サーバへ送るデータをここで指定します。「GET」を使う場合には、パラメータとして送りたいデータをURLの後ろに記述して送りますので引数には「null」を記述しておきます。

例えば次のように記述します。

send(null);

「open」メソッドで作成したHTTPリクエストを「send」メソッドを使ってサーバへリクエストを送信するという処理になります。

プロパティ一覧

次はプロパティです。XMLHttpRequestオブジェクトで用意されているプロパティには次のようなものがあります。

PropertyDescription
onreadystatechangeEvent handler for an event that fires at every state change
readyStateObject status integer:
0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete
responseTextString version of data returned from server process
responseXMLDOM-compatible document object of data returned from server process
statusNumeric code returned by server, such as 404 for "Not Found" or 200 for "OK"
statusTextString message accompanying the status code

各プロパティの概要は以下の通りです。

onreadystatechangeプロパティ

次の「readyState」プロパティの値が変化したかどうかを確認するために利用します。詳しくは別のページで詳しく見ていきます。

readyStateプロパティ

サーバに対してリクエストを送信すると、今度はサーバからレスポンスが帰ってきます。「readyState」プロパティにはレスポンスが帰ってきているのかどうかの状態が格納されています。

プロパティの値と状態の対応は次のようになります。

状態
0初期化がおこなわれていない
1sendメソッドでデータが送られていない
2sendメソッドは実行されているが応答がまだ無い
3応答を受信している途中
4全てのデータを受信済み

非同期通信を行う場合には全てのデータが受信済みかどうかを判別する必要がありますので「readyState」プロパティを参照して判定します。

statusプロパティ

サーバからの応答には送信したリクエストに対して期待している応答がある場合と、例えば指定したURLが間違っていたなどの理由でエラーだけが帰ってくる場合があります。その為、サーバからの応答を全て受信した上で、しかも正常な応答が帰ってきているかどうかもチェックしなければなりません。

「status」プロパティにはサーバがリクエストに対してどのように応答したかが含まれて居ます。例えば次のような応答が帰ってきます。

状態
200OK
401Unauthorized
403Forbidden
404Not Found
500Internal Server Error

「readyState」プロパティをチェックすると同時に「status」プロパティに「200」が帰ってきているかどうかをチェックする必要があります。

responseTextプロパティとresponseXMLプロパティ

実際にサーバから応答があったデータは「responseText」プロパティ又は「responseXML」プロパティで取得することが出来ます。2つのプロパティの違いは応答があったデータがテキスト形式なのかXML形式なのかで使い分けるよにします。

これらの「XMLHttpRequest」オブジェクトで利用できるメソッドとプロパティを使うことでサーバに対するリクエストの送信やサーバからのレスポンスを処理することが出来ます。具体的な使いかは次のページから確認していきましょう。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)