トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

angularJS_javascript_fileread

[AngularJS] [JavaScript] 外部テキストファイルの読み込み

非同期で外部テキストを読み込む処理は、「$httpを使った非同期読み込み」を行うほうがスマートかもしれません。

ここでは、外部で用意したテキストファイルをJavaScriptで読み込む例を記載します。

fileReadTest.html   <== ここでJavaScriptを記述するとする
hello.txt           <== 「Hello!!」とだけ記載されているテキストファイル

のようにした場合、fileReadTest.htmlのJavaScript部では

// ブラウザがIEか判定.
function checkBrowserIE() {
    var userAgent  = window.navigator.userAgent.toLowerCase();

    if (userAgent.indexOf('msie') != -1) {
        return true;
    } else if (userAgent.indexOf('trident/7') != -1) {
        return true;
    }
    return false;
}

function readFileToString(fileName) {
    // ファイル読み込み用.
    var xmlHttp;
    if (checkBrowserIE()) {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    } else {
        xmlHttp = null;
    }
    if (xmlHttp == null) return "";

    // fileNameのテキストファイルを読み込み(同期).
    var str = "";
    try {
        xmlHttp.open("GET", fileName, false);
        xmlHttp.send(null);
        str = xmlHttp.responseText;
    } catch(e) {
        window.alert(e);
    }

    return str;
}

IEとその他のブラウザで取得方向が少し異なります。ブラウザの判定は「ブラウザの種類を判定」を参照。

IEの場合は「xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");」で取得したものよりファイル読み込みをしないと「xmlHttp.open」で「アクセスが拒否されました」となりました。

それ以外では「XMLHttpRequest」でOK。であるので、IEとその他のブラウザで処理を変えてます。

xmlHttp.open("GET", fileName, false);
xmlHttp.send(null);
str = xmlHttp.responseText;

で、fileNameに指定されたテキストファイルを読み込みます。openの第二引数がファイル名、第三引数がfalseの場合は同期での取得(ファイルが読み込まれるまで待つ)。

sendを呼ぶとファイル読み込みを開始。xmlHttp.responseTextに結果のテキストが返されます。

var str = readFileToString('./hello.txt');

のようにしてファイルのテキストを取得できます。

非同期での読み込みは、

xmlHttp.onreadystatechange = function() {
  // xmlHttp.readyStateが4の場合は読み込み完了.
  // http以外の場合は、xmlHttp.statusが0になる.
  if (xmlHttp.readyState == 4 && (xmlHttp.status == 200 || xmlHttp.status == 0)) {
    window.alert(xmlHttp.responseText);
  }
}

のような記述をopenよりも前で記載し、openの第三引数はtrueにします。

xmlHttp.open("GET", fileName, true);
xmlHttp.send(null);

send後はすぐに次の処理に移行します。onreadystatechangeで指定した関数内にて、ファイルの読み込みが完了次第情報が返ります。


最終更新時間:2014年06月25日 13時23分44秒

Future's Laboratory 技術格納庫 2004-2013 Yutaka Yoshisaka.