2008年3月15日土曜日

Ajax - Active X

Internet ExplorerではActive Xを利用しますので,XMLHttpRequestの代わりにActiveX Object("Microsoft.XMLHTTP")を指定します.このオブジェクトにはデータの読み込みが完了した際に発生するonloadイベントがありませんので onloadイベントでなく onreadystatechangeイベント(状態が変化した時に発生)を利用します.状態が変化するイベントは, readyStateプロパティの値が, 0, 1, 2の場合はリクエスト, 3と4の場合はサーバーからの応答です.サーバーからの応答があるとActive XオブジェクトのreadyStateプロパティとstatusプロパティに,読み込み状態とサーバーからのステータスが入ります.サーバーのステータスコード(HTTPレスポンスコード)が 200 の場合には要求されたデータがあり,データを送ったことになります.しかし,データが送られたから読み込みが完了した,ということにはなりません.このためデータの読み込みが完了したかどうかを示すreadyStateプロパティの値も調べる必要があります.データの読み込みが完了した場合,readyStateプロパティの値は 4 になります.つまりreadyStateプロパティの値が 4 で, statusプロパティの値が 200 の場合,データの読み込みが完了したことになります.プログラムはつぎのようになります.

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<title>XMLHttpRequest()の基本(Win IEの場合)</title>
<script type="text/javascript"><!--
function loadTextFile()
{
httpObj = new ActiveXObject("Msxml2.XMLHTTP;);
httpObj.onreadystatechange = statusCheck;
httpObj.open("GET","data.txt",true);
httpObj.send(null);
}
function statusCheck()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
displayData();
}
}
function displayData()
{
document.ajaxForm.result.value = httpObj.responseText;
}
// --></script>
</head>
<body>
<h1>XMLHttpRequest()の基本 (Win IEの場合)</h1>
<form name="ajaxForm">
<input type="button" value="読み込み" onClick="loadTextFile()"><br>
<textarea name="result" cols="40" rows="5"></textarea>
</form>
</body>
</html>

このプログラムは,Microsoft.XMLHTTP よりパフォーマンスのよい Msxml2.XMLHTTP を利用しています(Internet Explorer 6以降)
次回は,楽をするために共通の関数を作成してみましょう.バサラ!

しっかし,雨が上がって晴れた今日はクシャミがひどかったっすよ+_+#

0 件のコメント: