Ajax テキストファイルを読み込む

loadボタンを押すとテキストファイルを読み込んで表示します。

onclickにformのidを指定することで特定のフォームの内容を変更することができます。

ボタンのonclickに登録した関数にはformのid名を指定して送っているのでロードされたテキストは指定されたform内に表示されます。

loadtext1.txt

ボタン「load1」が押されました。

loadtext1.txtの内容を表示します。

loadtext2.txt

ボタン「load2」が押されました。

loadtext2.txtの内容を表示します。

HTML構造

<form id="loadText1">
  <p>
    <input type="button" value="load1" onclick=
"loadTextFile('loadText1','GET','text/loadtext1.txt',true)" 
onkeypress="dummy()" tabindex="1" accesskey="A" />
    <input type="button" value="load2" onclick=
"loadTextFile('loadText2','GET','text/loadtext2.txt',true)" 
onkeypress="dummy()" tabindex="2" accesskey="B" />
  </p>
  <p>
    <textarea name="text" cols="50" rows="4" tabindex="3" 
accesskey="C">formのid = loadText</textarea>
  </p>
</form>
<form id="loadText2">
  <p>
    <textarea name="text" cols="50" rows="4" tabindex="4" 
accesskey="D">formのid = loadText2</textarea>
  </p>
</form>

JavaScript

HTTP通信を行う時は必ずXMLHttpRequestオブジェクトを作成するのでオブジェクトを作成する関数をcreateRequest()にまとめました。

IE6以前ではXMLHttpRequestを使えないのでActiveXObjectを使います。

function createRequest() {
  // IE 以外のブラウザ
  if(window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if(window.ActiveXObject) {
    try {
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e2) {
        return null;
      }
    }
  } else {
    return null;
  }
}
function loadTextFile(idname, method, filename, async) {
  var errmsg = "";
  var ajaxObj = createRequest();
  if(ajaxObj) {
    ajaxObj.open(method, filename, async);
    ajaxObj.onreadystatechange = function() {
      if (ajaxObj.readyState == 4) {
        document.forms[idname].text.value 
          = ajaxObj.responseText;
      }
    }

    ajaxObj.send(null);
  } else {
    errmsg += "XMLHttpRequestオブジェクトの生成に失敗しました。";
  }
  if(errmsg) {
    document.forms.loadText2.text.value = errmsg;
  }
}
function dummy() {
  return false;
}