XMLHttpRequest オブジェクトは、サーバとのデータ交換に使用します。
リクエストをサーバへ送信するには、XMLHttpRequest オブジェクトの open() と send() メソッドを使用します:
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
メソッド | 説明 |
---|---|
open(method, url, async) | リクエストのタイプを指定する メソッド: リクエストのタイプ:GET または POST url: サーバ (ファイル) の位置 async: true (非同期) または false (同期) |
send() | サーバにリクエストを送信する (GET を使用する場合) |
send(string) | サーバにリクエストを送信する (POST を使用する場合) |
GET は、POST に比べ単純で速いので、多くの場合に使用されています。
しかしながら、次のようなときは、通常 POST が使われます:
簡単な GET リクエスト:
上記例では、キャッシュされた結果を取得しているかもしれません。これを避けるためは、URL にユニークな ID を追加します:
GET メソッドで情報を送信したい場合は、URL に情報を追加します:
簡単な POST リクエスト:
HTML フォームのようなデータを POST するには、setRequestHeader() で HTTP ヘッダを加えます。 send() メソッドの中で、送信したいデータを指定します:
xhttp.open("POST", "ajax_test.html", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
Try it Yourself »
メソッド | 説明 |
---|---|
setRequestHeader(header, value) | リクエストに HTTP ヘッダを追加する header: ヘッダ名を指定 value: ヘッダの値を指定 |
open() メソッドの url パラメータには、サーバ上のファイ・アドレスを指定します:
xhttp.open("GET", "ajax_test.html", true);
ファイルは .txt や .xml または(応答を返す前に、サーバでのアクションを実行できる).html や .php の ようなサーバスクリプトファイルなど、どのような種類のファイルでも可能です。
AJAXは、Asynchronous JavaScript and XML の略で、XMLHttpRequest オブジェクトが AJAX として振る舞うためには、 open() メソッドの async パラメータには true を設定しなければなりません:
xhttp.open("GET", "ajax_test.html", true);
リクエストを非同期に送ることは、ウェブ開発者にとって大きな改善です。 サーバで行われるタスクの多くは、非常に時間がかかります。 AJAX 以前、このような処理はアプリケーションのハングや停止の基となっていました。
AJAX により、JavaScript はサーバ・レスポンスを待つ必要がなくなり、代りに以下のことができるようになりました:
async=true を使用する場合、onreadystatechange イベントにおいて、レスポンスが ready の時に実行する関数を指定します:
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
Try it Yourself »
onreadystatechange の詳細は、次章で学習します。
async=false を使用するには、open() メソッドの 3 番目のパラメータを false に変更してください:
xhttp.open("GET", "ajax_info.txt", false);
async=false の指定は推奨されませんが、少量の小さなリクエストには問題ありません。
サーバ・レスポンスが ready になるまで、JavaScript は実行を再開しないことを覚えておいてください。 アプリケーションは、サーバがビジーの場合や遅い場合にはハングしたりや停止したりします。
注: async=false を使用する時には、onreadystatechange 関数は書きません - send() ステートメントの、 直後にコードを置きます:
xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;
Try it Yourself »