XHR 応答

XHR 応答を深く理解する: タイプ、属性、実践的なアプリケーション

Web 開発において、サーバーとの非同期通信は不可欠な要素となっています。そして、その中心的な役割を担うのが XMLHttpRequest (XHR) です。XHR を使用することで、ページ遷移を伴わずにデータの送受信が可能となり、動的な Web アプリケーションを構築することができます。

本記事では、XHR の中でも特に重要な **レスポンス** に焦点を当て、その詳細について解説していきます。レスポンスには、サーバーから送信されたデータやステータスコードなどが含まれており、適切に処理することで、柔軟かつ堅牢な Web アプリケーションを実現できます。

1. XHR レスポンスタイプ: 必要なデータ形式を取得する

XHR から返されるデータは、テキスト、バイナリデータ、JSON など、さまざまな形式をとることができます。`responseType` プロパティを使用することで、取得したいデータ形式を指定することができます。

responseType の値 説明
"" (デフォルト) または "text" DOMString 型のテキストデータとして返されます。
"arraybuffer" ArrayBuffer 型のバイナリデータとして返されます。画像や音声データなどの処理に適しています。
"blob" Blob 型のバイナリデータとして返されます。大きなファイルの処理に適しています。
"document" HTML Document または XML Document として返されます。別の HTML ページや XML データを取得する場合に便利です。
"json" JavaScript オブジェクトとして返されます。サーバーとのデータ交換に広く使用される JSON 形式でデータを取得できます。

適切な `responseType` を選択することで、データ処理を効率化し、コードの可読性を向上させることができます。


// JSON データを取得する場合
const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data');
xhr.responseType = 'json';

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.response); // JavaScript オブジェクトとしてアクセス可能
  }
};

xhr.send();

2. response 属性: XHR レスポンスデータへのアクセス

`response` 属性は、XHR レスポンスデータにアクセスするためのキーとなります。ただし、`response` 属性の値は、`responseType` の設定によって異なります。

  • `responseType` が設定されていない場合、または "text" に設定されている場合は、`response` 属性は DOMString 型のテキストデータを返します。
  • その他の `responseType` の値が設定されている場合、`response` 属性は対応する型のデータ (ArrayBuffer、Blob、Document、JavaScript オブジェクトなど) を返します。

重要な点は、`readyState` が 4 (リクエストが完了している) かつ `status` が 200 (リクエストが成功している) の場合にのみ、`response` 属性から完全なデータを取得できるということです。


xhr.onload = function() {
  if (xhr.readyState === 4 && xhr.status === 200) {
    console.log(xhr.response); // レスポンスデータへのアクセス
  }
};

3. XHR エラー処理: ネットワークリクエストの失敗への対処

ネットワークリクエストは、様々な理由で失敗する可能性があります。XHR では、`status` 属性と `onerror` イベントを使用して、リクエストの成否判定とエラー処理を行うことができます。

`status` 属性は、HTTP ステータスコード (200 OK, 404 Not Found, 500 Internal Server Error など) を表します。

`onerror` イベントは、ネットワークエラーやサーバーエラーなど、XHR リクエストが失敗した場合に発生します。


xhr.onerror = function() {
  console.error('リクエストエラーが発生しました。');
};

4. XHR レスポンスの実践的なアプリケーション: 動的な Web アプリケーションの構築

XHR レスポンスは、動的な Web アプリケーションを構築するための強力なツールとなります。例えば、以下のようなケースで活用できます。

  • AJAX フォーム送信: ページ遷移を伴わずにフォームデータを送信し、サーバーからの応答を動的に表示できます。
  • 非同期データ読み込み: ページ全体を再読み込みすることなく、必要なデータだけを取得して表示できます。
  • リアルタイムアップデート: チャットアプリケーションや通知機能など、リアルタイムな情報更新を実現できます。

これらのアプリケーションを通じて、XHR レスポンスを効果的に利用することで、ユーザーエクスペリエンスを向上させ、より魅力的な Web アプリケーションを開発できます。

関連資料

Q&A

Q1. `responseType` を設定せずに XHR リクエストを送信した場合、`response` 属性にはどのような値が格納されますか?

A1. `responseType` を設定しない場合、`response` 属性には DOMString 型のテキストデータが格納されます。これは、`responseType` のデフォルト値が "text" であるためです。

Q2. `onerror` イベントは、どのような状況で発生しますか?

A2. `onerror` イベントは、ネットワークエラーやサーバーエラーなど、XHR リクエストが失敗した場合に発生します。例えば、サーバーに接続できなかった場合や、サーバーがエラーレスポンスを返した場合などに発生します。

Q3. XHR を使用してファイルアップロードを行うことはできますか?

A3. はい、XHR を使用してファイルアップロードを行うことができます。`FormData` オブジェクトを使用することで、ファイルをリクエストに含めることができます。詳細については、関連資料などを参照してください。