JavaScript

JavaScript's XMLHttpRequest is an object that allows web pages to perform asynchronous communication with the server, enabling data exchange without reloading the page.

XMLHttpRequest [object]

 XMLHttpRequest(XHR)は、Webページがサーバーと非同期通信を行うために使用されるオブジェクトです。これにより、ページ全体を再読み込みせずに特定のデータをサーバーから取得または送信できます。この機能は、Webアプリケーションがより速く、反応性が高いものになるため、ユーザーエクスペリエンスを向上させます。

XMLHttpRequestの基本的な使用方法

XMLHttpRequestオブジェクトの作成
最初に、通信を行うための XMLHttpRequestオブジェクトを新しく作成します。
リクエストの設定
次に、作成したオブジェクトを使って、どのようなリクエストを送るのか(取得するデータの種類や送信先の URLなど)を設定します。
イベントハンドラの設定
サーバーからの応答を受け取った後に実行される処理(コールバック関数)を定義します。これにより、応答に基づいて特定のアクションを行うことができます。
リクエストの送信
最後に、設定されたリクエストをサーバーに送信します。

基本的なメソッド

open(method, url[, async, user, password])
リクエストを初期化します。
method
HTTPメソッド(例: "GET", "POST")
url
リクエストを送るURL
async
非同期実行するかどうか(デフォルトはtrue)
user, password
認証が必要な場合に使用します
send([body])
リクエストを実際に送信します。bodyは POSTメソッドなどでサーバーに送信するデータです。
abort()
進行中のリクエストを中止します。
setRequestHeader(header, value)
送信するHTTPリクエストヘッダを設定します。
getResponseHeader(name)
指定したレスポンスヘッダーの値を取得します。
getAllResponseHeaders()
全てのレスポンスヘッダーを CRLFで区切られた文字列として取得します。

イベントハンドラ用のメソッド

 XMLHttpRequestはイベントドリブンな APIであり、以下のイベントハンドラプロパティを提供しています。

onreadystatechange
readyStateプロパティが変化したときに発生します。リクエストの状態追跡に使用されます。
onloadstart
リクエストが開始されたときに発生します。
onprogress
リクエストが進行中に定期的に発生します。進捗状況の追跡に使用されます。
onabort
リクエストが中断されたときに発生します。
onerror
リクエストがエラーにより失敗したときに発生します。
onload
リクエストが成功したときに発生します。
ontimeout
リクエストがタイムアウトしたときに発生します。
onloadend
リクエストが完了したとき(成功または失敗)に発生します。

 これらのメソッドとイベントハンドラを適切に使用することで、非同期通信を含む複雑なウェブアプリケーションの開発が可能になります。

Sample

 XMLHttpRequestを使って、特定の URLからデータを非同期に取得し、その結果を Webページ上に表示する簡単な例です。

HTML

<button id="loadButton">データをロード</button>
<div id="dataDisplay"></div>

JavaScript

document.getElementById('loadButton').addEventListener('click', function() {
	var xhr = new XMLHttpRequest();
	xhr.open('GET', 'https://jsonplaceholder.typicode.com/posts/1', true);

	xhr.onload = function() {
		if (xhr.status >= 200 && xhr.status < 300) {
			// レスポンスが成功した場合の処理
			var data = JSON.parse(xhr.responseText);
			document.getElementById('dataDisplay').textContent = data.title;
		} else {
			// エラー処理
			document.getElementById('dataDisplay').textContent = 'データのロードに失敗しました。';
		}
	};

	xhr.onerror = function() {
		// 通信エラー処理
		document.getElementById('dataDisplay').textContent = 'リクエスト中にエラーが発生しました。';
	};

	xhr.send();
});

CSS

button {
	display: inline-block;
	padding: 1ex 2ex;
	margin: 1ex;
	font-size: larger;
	box-shadow: 0.2ex 0.2ex 0.3ex;
}

 このサンプルでは、ボタンをクリックすることでサーバーからデータを取得し、その結果をページ上の div要素に表示します。XMLHttpRequestを使用する際は、クロスオリジンリソースシェアリング(CORS)ポリシーに注意する必要があります。CORSポリシーに違反している場合、ブラウザはリクエストをブロックします。このサンプルコードは、CORSポリシーを守るために公開 APIを使用しています。