XMLHttpRequest
JavaScript から HTTP リクエストを送信するための API として XMLHttpRequest が提供されています。
名称に XML という名前を含んでいますが、XML のみしか扱えないわけではありません。
また Ajax と混同しがちですが、Ajax は XMLHttpRequest API を用いたプログラミング手法のことを指します。
GET リクエスト
var request = new XMLHttpRequest();
// HTTP メソッド、URL を指定
request.open('GET', 'data.csv');
// GET はリクエストボディが無いため null を指定
request.send(null);
POST リクエスト
POST リクエストの場合、リクエストパラメータを application/x-www-form-urlencoded
形式でエンコードする必要があります。
エンコードには encodeURIComponent
関数を利用します。
// エンコード処理を行う関数を定義
var encodeFormData = function(data) {
if (!data) return '';
var params = [];
for (var name in data) {
var key = encodeURIComponent(name.replace(' ', '+'));
var value = encodeURIComponent(data[name].toString().replace(' ', '+'));
params.push(key + '=' + value);
}
console.log(params.join('&'));
return params.join('&');
}
var request = new XMLHttpRequest();
// HTTP メソッド、URL を指定
request.open('POST', 'login.php');
// リクエストヘッダ Content-Type を指定
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// エンコードした文字列を send に指定
request.send(encodeFormData({name: 'foo'}));
レスポンスのハンドリング
send
する前に onreadystatechange
にイベントハンドラを登録することで、HTTP レスポンスをハンドリングすることができます。
readyState の値によって、HTTP リクエストの状態を検知することができます。
var request = new XMLHttpRequest();
request.open('GET', 'data.csv');
request.onreadystatechange = function() {
// リクエストが完了し、HTTP ステータスコードが 200 の場合
if (request.readyState === 4 && request.status === 200) {
console.log(request.responseText);
}
}
readyState値 | 説明 |
---|---|
0 | open が呼び出されていない |
1 | open が呼び出された |
2 | ヘッダを受け取った |
3 | レスポンスボディを受信中 |
4 | レスポンスの受信が完了した |