同期通信によるファイルの取得

広告

それでは実際に試してみます。まずは非同期通信を試して見る前に同期通信の方を試してみます。先に記載したとおり、InternetExplorerとそれ以外の場合で扱いが異なります。ここではIE以外のブラウザで閲覧される場合について見ていきます。(なお、IE7.0ではどちらの方式でも利用可能です)。

サンプルとしてサーバ側に設置されたテキストファイルを取得し表示してみます。

クライアントからサーバに対して通信を行うにはXMLHttpRequestオブジェクトを使います。プログラムはJavaScriptとしてHTMLページ内に記述していきます。

var xmlHttp;

xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "https://www.ajaxtower.jp/sample/1/sample.txt", false);
xmlHttp.send(null);

まずは「XMLHttpRequest」オブジェクトを作成し、サーバに対するリクエストを作成します。今回は指定のディレクトリにある「sample.txt」を同期通信を使って取得するリクエストを送信します。

同期通信のため「send」メソッドを実行したあと、サーバからのレスポンスが全て帰ってくるまで処理が止まります。全てのレスポンスを受信したら後は表示するだけです。

var xmlHttp;

xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", "https://www.ajaxtower.jp/sample/plan.txt", false);
xmlHttp.send(null);
alert(xmlHttp.responseText);

これだけのコードでサーバからファイルを読み込みダイアログに表示させることが出来ます。

どのタイミングでこのプログラムを実行するかについては、今回はHTMLページ内にあるボタンをクリックしたら実行するようにしてみます。完成形のHTMLページは次のようになります。

sample1.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">
<!--
function loadText(){
  var xmlHttp;

  xmlHttp = new XMLHttpRequest();
  xmlHttp.open("GET", "https://www.ajaxtower.jp/sample/plan.txt", false);
  xmlHttp.send(null);
  alert(xmlHttp.responseText);
}
// -->
</script>

</head>
<body>

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

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

</body>
</html>

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

同期通信

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

同期通信

※IE7.0ではこの記述方法でも正常に動作します

( Written by Tatsuo Ikura )