InternetExplorer(IE)での非同期通信

広告

IE以外のブラウザの場合にはXMLHttpRequestオブジェクトを取得する場合、次のように記述していました。

xmlHttp = new XMLHttpRequest();

IEの場合にはActiveXオブジェクトとして取得しますので、次のようになります。

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

この部分だけが異なるだけですので、IEで非同期通信を行う基本的なプログラムは次の通りです。

なお「onreadystatechange」イベントに関する設定(イベントハンドラに関する設定)は、サーバに対する通信を行う「send」メソッドを実行する前に設定しておく必要があります。最終的な形は次のようになります。

var xmlHttp;

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlHttp.onreadystatechange = checkReadyState;
xmlHttp.open("GET", "http://www.ajaxtower.jp/sample/plan.txt", false);
xmlHttp.send(null);

function checkReadyState(){
  if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)){
    alert(xmlHttp.responseText);
  }
}

サンプルプログラム

では実際に試して見ます。

sample3.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0.1//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang="ja">
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=Shift_JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<title>非同期通信テスト</title>

<script type="text/javascript">
<!--
var xmlHttp;

function loadText(){
  xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  xmlHttp.onreadystatechange = checkStatus;
  xmlHttp.open("GET", "http://www.ajaxtower.jp/sample/plan.txt", true);

  xmlHttp.send(null);
}

function checkStatus(){
  if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
    alert(xmlHttp.responseText);
  }
}

// -->
</script>

</head>
<body>

<h1>非同期通信テスト</h1>

<form>
<input type="button" value="ファイル読み込み" onClick="loadText()">
</form>

</body>
</html>

上記のHTMLページをブラウザ(今回はIE)で見てみると次のように表示されます。

IEでの非同期通信

HTMLページ内のボタンをクリックすると、サーバからファイルを読み込み、データの受信が完了するとファイル内に記述されたテキストをダイアログで表示します。

IEでの非同期通信

( Written by Tatsuo Ikura )