« ブログをつなく小鳥たち 「Carol」 | メイン | Googleの「勝手にREST API」を利用して検索する (Ruby編) »

「XMLHttpRequest」をつかってJavaScriptで通信する?

  はてなブックマークに追加 このエントリを livedoor クリップへ追加

JavaScriptで他のサーバと通信してデータを取得する方法を調査していました。

「JavaScript 通信」というキーワードで検索して、「Ajaxを勉強しよう」というサイトを発見しました。「XMLHttpRequest」クラスをつかって、HTTPで通信する方法について、非常に詳しく紹介されています。


とりあえず、まねしてコーディングしてみました。
ソースコードを示します。

--------------------- ここから (test.js)
var httpObj = null;
var doc = null;

// テキストファイルを読み込んで、
// ファイルの内容を表示させるための関数
loadTextFile = function() {

  if( doc == null ) {

    // HTMLファイルの要素を取得する
    // どの要素を取得するかは、HTMLのid属性で指定する
    doc = document.getElementById("form");

  }

  // 通信するためのオブジェクトを生成する
  httpObj = _XMLHttpRequest();

  if( httpObj != null ) {
    httpObj.onreadystatechange = displayData;
    httpObj.open("GET", "data.txt", true);
    httpObj.send(null);
  }

}


// 通信を行うためのオブジェクトを生成するための関数
// IEとそれ以外のブラウザーで処理をわける
_XMLHttpRequest = function() {

  var xmlHttpObj = null;

  //IEの場合
  if(window.ActiveXObject){
    try {
      xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
      alert("A");
    } catch (e1) {
      try {
        xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
        alert("B");
      } catch (e2) {
        // エラー時の処理
      }
    }

    // IE以外の場合
  } else {
    try {
      xmlHttpObj = new XMLHttpRequest();
      alert("C");
    } catch(e) {
      // エラー時の処理
    }
  }

  return xmlHttpObj;

}


// 読み込んだファイルの内容を表示するための関数
displayData = function() {

// readyStateプロパティの値が
// 0,1,2の場合はリクエスト
// 3,4の場合はサーバーからの応答であることをあらわす

// statusプロパティの値が
// 200はリクエストは成功 したことをあらわす
// ローカルの環境(ウェブサーバを介さない通信)で実行した場合は常に0となった
if( (httpObj.readyState == 4) ) { //&& (httpObj.status == 200)

if( doc != null ) {
doc.result.value = httpObj.responseText;
} else {
alert("docがnullです");
}

alert("finish"+ "," + httpObj.status);

} else {
alert( "通信中です" );
}

}
--------------------- ここまで (test.js)

--------------------- ここから (test.html)
<html>

<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8">
  <meta http-equiv="Content-Script-Type" content="text/javascript">

  <script src="./test.js" type="text/javascript"></script>
</head>

<body>

<form id="form">
  <input type="button" value="読み込み" onClick="loadTextFile()"><br>
  <textarea name="result" cols="40" rows="5"></textarea>
</form>

</body>
</html>
--------------------- ここまで (test.html)

--------------------- ここから (data.txt)
にほんごだー!
改行だー!
--------------------- ここまで (data.txt)

(注)
  すべてのファイルのエンコードは、「UTF-8」です。


Firefox 2」と「IE 7」で動作確認をしました。

セキュリティの上の理由で、「XMLHttpRequest」を利用した通信は同ドメイン内のみ許可されるようです。時間をかけてつくった後に気づいたんですが・・・(TT)


実際に実験してみたところ、Firefoxではエラーが報告されます。一方、IEでは通信してデータを取得することができました(笑)。


他のドメインと通信する方法がいくつかあるようなので、調査、導入してみようと思います。

情報をお持ちの方、どうぞご教授ください。







Ads BOARD








最近のエントリーとその関連エントリー

トラックバック

このエントリーのトラックバックURL:
http://kazuhiro.ty.land.to/blog/mt-tb.cgi/142

  Map