XMLHttpRequestオブジェクトのメソッドとプロパティ
実際にXMLHttpRequestオブジェクトを利用する方法を確認する前に、XMLHttpRequestオブジェクトに用意されているメソッドとプロパティについて見ていきます。
メソッド一覧
まずはメソッドです。XMLHttpRequestオブジェクトで用意されているメソッドには次のようなものがあります。
Method | Description |
---|---|
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オブジェクトで用意されているプロパティには次のようなものがあります。
Property | Description |
---|---|
onreadystatechange | Event handler for an event that fires at every state change |
readyState | Object status integer: 0 = uninitialized 1 = loading 2 = loaded 3 = interactive 4 = complete |
responseText | String version of data returned from server process |
responseXML | DOM-compatible document object of data returned from server process |
status | Numeric code returned by server, such as 404 for "Not Found" or 200 for "OK" |
statusText | String message accompanying the status code |
各プロパティの概要は以下の通りです。
onreadystatechangeプロパティ
次の「readyState」プロパティの値が変化したかどうかを確認するために利用します。詳しくは別のページで詳しく見ていきます。
readyStateプロパティ
サーバに対してリクエストを送信すると、今度はサーバからレスポンスが帰ってきます。「readyState」プロパティにはレスポンスが帰ってきているのかどうかの状態が格納されています。
プロパティの値と状態の対応は次のようになります。
値 | 状態 |
---|---|
0 | 初期化がおこなわれていない |
1 | sendメソッドでデータが送られていない |
2 | sendメソッドは実行されているが応答がまだ無い |
3 | 応答を受信している途中 |
4 | 全てのデータを受信済み |
非同期通信を行う場合には全てのデータが受信済みかどうかを判別する必要がありますので「readyState」プロパティを参照して判定します。
statusプロパティ
サーバからの応答には送信したリクエストに対して期待している応答がある場合と、例えば指定したURLが間違っていたなどの理由でエラーだけが帰ってくる場合があります。その為、サーバからの応答を全て受信した上で、しかも正常な応答が帰ってきているかどうかもチェックしなければなりません。
「status」プロパティにはサーバがリクエストに対してどのように応答したかが含まれて居ます。例えば次のような応答が帰ってきます。
値 | 状態 |
---|---|
200 | OK |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
500 | Internal Server Error |
「readyState」プロパティをチェックすると同時に「status」プロパティに「200」が帰ってきているかどうかをチェックする必要があります。
responseTextプロパティとresponseXMLプロパティ
実際にサーバから応答があったデータは「responseText」プロパティ又は「responseXML」プロパティで取得することが出来ます。2つのプロパティの違いは応答があったデータがテキスト形式なのかXML形式なのかで使い分けるよにします。
これらの「XMLHttpRequest」オブジェクトで利用できるメソッドとプロパティを使うことでサーバに対するリクエストの送信やサーバからのレスポンスを処理することが出来ます。具体的な使いかは次のページから確認していきましょう。
( Written by Tatsuo Ikura )