var data = { param1: 'abc', param2: 100 }; // POSTメソッドで送信するデータ
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function()
{
var READYSTATE_COMPLETED = 4;
var HTTP_STATUS_OK = 200;
if( this.readyState == READYSTATE_COMPLETED
&& this.status == HTTP_STATUS_OK )
{
// レスポンスの表示
alert( this.responseText );
}
}
xmlHttpRequest.open( 'POST', 'index.php' );
// サーバに対して解析方法を指定する
xmlHttpRequest.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
// データをリクエスト ボディに含めて送信する
xmlHttpRequest.send( EncodeHTMLForm( data ) );
POSTとGETメソッドとの相違点は、
の3点です。
このときContent-TypeにはHTMLフォームの送信に使用されるapplication/x-www-form-urlencodedを指定し、それに伴い送信するデータもその形式に合わせてエンコードする必要があります。その処理が次の関数になります。
// HTMLフォームの形式にデータを変換する
function EncodeHTMLForm( data )
{
var params = [];
for( var name in data )
{
var value = data[ name ];
var param = encodeURIComponent( name ) + '=' + encodeURIComponent( value );
params.push( param );
}
return params.join( '&' ).replace( /%20/g, '+' );
}
処理としてはパラメータの名前と値をURLエンコードして「=」で連結し、さらにパラメータを「&」で連結しています。
このときURLエンコードに注意しなくてはなりません。「application/x-www-form-urlencoded」では半角スペースが「+」でなければならないため、上記コードではencodeURIComponent()のエンコード結果の「%20」を「+」に修正しています。