「JavaとAjaxでページを作る」ではAjaxとJavaを組み合わせてWebページを作るテクニックを紹介します。4回目では、画面上のボタンがクリックされたら、ServletからXMLを取得してフォームに設定するサンプルを紹介します。1回目は、サーバーからテキストファイルを取得する方法です。
Ajaxとは簡単に言ってしまうと「JavaScriptでサーバーと通信を行ってデータを取得する技術」のことです。プログラミングの手順としては、まずサーバーと通信を行うオブジェクトを取得します。このオブジェクトがIEの場合と、それ以外の場合で異なります。IE以外の場合は「XMLHttpRequest」を使用します。IEの場合はActive Xを使用します。
通信用のオブジェクトを生成したら、サーバーにリクエストを送信し、サーバーからの応答を処理します。読み込むデータはUTF-8でエンコードされている必要があります。それ以外の文字コードの場合、文字化けが発生します。では、まずIEの場合のサンプルを見てみます。
「IEのサンプル」
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>javaとajaxでページを作る(1)-サーバーからデータをロードする(IE)</title>
<script type="text/javascript"><!--
function loadData()
{
xhObj = new ActiveXObject("Microsoft.XMLHTTP");
xhObj.onreadystatechange = displayData;
xhObj.open("GET","data.txt",true);
xhObj.send(null);
}
function displayData()
{
if ((xhObj.readyState == 4) && (xhObj.status == 200))
{
document.getElementById("display").innerHTML = xhObj.responseText;
}
}
// --></script>
</head>
<body>
<h1>javaとajaxでページを作る(1)-サーバーからデータをロードする(IE)</h1>
<form name="form1">
<input type="button" value="ロード" onClick="loadData()"><br>
</form>
<div id="display"></div>
</body>
</html>
new ActiveXObject("Microsoft.XMLHTTP")でActive Xオブジェクトを生成し、xhObj.onreadystatechange = displayData;で送受信の状態が変化した時に発生するイベントのハンドラを設定しています。
次にopenメソッドでリクエストを送信する準備をします。openメソッドの第1引数にはhttpのGETまたはPOSTを指定します。第2引数には要求するコンテンツのURLを指定します。第3には非同期通信を行うかどうかを指定します。trueを指定すると非同期通信になります。falseを指定するとレスポンスが返るまで何も出来なくなるので、通常はtrueを指定します。
状態変化のイベントハンドラとして指定したdisplayData()では、まず状態の確認を行っています。readyStateには順番に0(UNINITIALIZED)、1(LOADING)、2(LOADED)、3(INTERACTIVE)、4(COMPLETED)というステータスが入りますが、responseTextからデータを取得できるのは4(COMPLETED)のみです。statusにはHTTPのレスポンスコードが入ります。従って、データを取得する際はreadyStateが4、statusが200になっていることをチェックしてから行います。
サンプルで使用している「Microsoft.XMLHTTP」は、IE5以降で使用できますがIE6以降ではこれよりパフォーマンスが良い「Msxml2.XMLHTTP」が使用できます。さて、次にIE以外のブラウザの場合のサンプルコードを紹介します。
「IE以外のサンプル」
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<title>javaとajaxでページを作る(1)-サーバーからデータをロードする(IE以外)</title>
<script type="text/javascript"><!--
function loadData()
{
xhObj = new XMLHttpRequest();
xhObj.onload = displayData;
xhObj.open("GET","data.txt",true);
xhObj.send(null);
}
function displayData()
{
if ( xhObj.status == 200 )
{
document.getElementById("display").innerHTML = xhObj.responseText;
}
}
// --></script>
</head>
<body>
<h1>javaとajaxでページを作る(1)-サーバーからデータをロードする(IE以外)</h1>
<form name="form1">
<input type="button" value="ロード" onClick="loadData()"><br>
</form>
<div id="display"></div>
</body>
</html>
IEの場合と違うのは、XMLHttpRequestを使用している点とonloadイベントを処理している点です。IEの場合はonloadイベントがありませんでしたので、onreadystatechangeイベントを処理していました。onloadイベントはデータのロード完了時にコールされるのでreadyStateをチェックする必要はありません。
このサンプルはFirefox、Opera、Safariなどで動作します。今回の2つのサンプルはそれぞれIEで動作するサンプル、IE以外で動作するサンプルと対象が分かれていましたが、実際のWebサイトでは、対象ブラウザを限定できない場合もあります。次回ではブラウザに関わらず動作するサンプルコードを紹介します。
ちょっと一休み. Javaキーワード並び替えゲーム
画面に表示される文字列を並び替えるとJavaに関連するキーワードになります。ヒントをたよりに並び替えを行ってエンターを押してください。
ユーザ登録をしてログインするとランキングに参加できます。